Two sum:
对于每个数,寻找这个数之前是否有和自己配对的数。在循环的时候同时记录已经访问过的数,以便后面的数进行查找。
对于只有查找操作的数据结构,最好的当然是哈希,STL中unordered_map使用的是哈希实现查找复杂度是O(1),map是使用的平衡二叉树所以是O(log(n))复杂度。
3Sum:
转换为2Sum问题,复杂度为O(n * n),如果使用上述2Sum解的话,还需要一个额外的unordered_map存数据。
由于复杂度大于排序的复杂度,可以先排个序,同时排序的话孩能处理数字重复的问题。
使用双指针获取两个数相加为target,遇到target后注意要判断相等的数,与当前两个数相等的数的配对情况都是重复的,可忽略。
3Sum Closest:
同3Sum,只需在内部判断三个数的和与target的距离,距离近则记录,距离为0跳出循环。
4Sum:
3Sum外面套一层。
网友评论