跳到主要内容

N-sum问题通解

· 阅读需 4 分钟

N-sum 问题还是比较典型的,这里进行一下小结。

首先描述一下 N-sum 问题:有一个数组 nums,要求从数组中选择 n 个数,使得这些数的和恰好为 target ,输出所有不重复的可行组合。

如果采用暴力解法,显然时间复杂度为 O(Nn)O(N^n),这一般是不可取的。

下面是 N-sum 问题的LeeCode链接:

1. Two Sum

15. 3Sum

18. 4Sum

Two-Sum

先来解决Two-Sum问题,这是N-sum问题的基础。如果我们能把Two-Sum的时间复杂度降为 O(N)O(N) ,然后就能把N-sum的时间复杂度降为 O(Nn1)O(N^{n-1}) 了。

求单链表交点

· 阅读需 6 分钟

题目

今天面试时,面试官问了这样一个问题:两个单链表相交,怎么求交点。所谓相交,就是两个节点的next指针相同。

memset的一个坑

· 阅读需 2 分钟

为数组赋初值是很常见的操作,如果不赋初值,默认就是随机值:

int main() {
int a[5];
return 0;
}

如果想将a中的元素全部赋为0,第2行可以写为:

int a[5]{0};

这是C++ 11的写法,在此之前应写为:

int a[5] = {0};

详解Minimax算法与α-β剪枝

· 阅读需 7 分钟

在局面确定的双人对弈里,常采用博弈树搜索。我方追求更大的赢面,而对方会设法降低我方的赢面。由于局面确定,因此可以对赢面进行评估。我方往较大赢面的方向走,同时考虑对方的走法。由于对方的走法不确定,就假设对方会选择最大程度降低我方赢面的方向走,我方应规避那些对方可以大幅降低我方赢面的走法。

Minimax算法

称我方为MAX,对方为MIN,图示如下:

Linux下实用图片批处理脚本

· 阅读需 2 分钟

经常需要在Linux下批量处理图片,想了想,还是写个实用的批处理小脚本一劳永逸。

代码

SRC为待处理目录;DST为目标目录,也就是保存处理后的文件的目录;SFX用于设置文件名后缀,如果为空就不修改文件名后缀。如果SRC有子目录,DST将和SRC有相同的子目录结构。脚本中的convert命令修改成相应的处理命令。

#!/bin/bash

SRC=/path/to/source
DST=/path/to/destination
SFX=jpg

IFS_old=$IFS
IFS=$'\n'
for dir in $(find $SRC -type d)
do
mkdir -p $(echo $dir | sed "s|$SRC|$DST|")
done
for file in $(find $SRC -type f)
do
new_file=$(echo $file | sed "s|$SRC|$DST|")
if [[ -n $SFX ]]; then
new_file=${new_file%.*}.$SFX
fi
echo $file
convert $file $new_file
done
IFS=$IFS_old