n sum

  1. Two Sum
    Example:

    Given nums=[2,7,11,15],target=9,
    nums[0]+nums[1]=9;
    return [0,1]


思路:排序后,双指针遍历,可以去重

1
while (i < nums.length - 1 && nums[i] == nums[i + 1]) i++;

或者存入HashMap<nums[i],i>,查找target-nums[i],

  1. 3Sum
    Example:

    Given nums=[-1, 0, 1, 2, -1, -4],
    return
    [
     [-1,-,1]
     [-1,-1,2]
    ]

思路:固定第一个数字i,遍历剩余的,i++;


  1. 4Sum
    Example:

    Given nums=[1, 0, -1, 0, -2, 2],target=0.
    return :
    [
     [-1,0,0,1]
     [-2,-1.1,2]
     [-2,0,0,2]
    ]

思路:在三个数的基础上多了一个循环。注意可以进行优化速度
排序后,nums[i]+nums[i+1]+nums[i+2]+nums[i+3]>target;i++;直接结束
nums[i]+nums[j]+nums[nums.length-2]+nums[nums.length-1]<target;continue;直接进入下一轮循环,