使用两个相同反向或者相反方向的指针扫描数组从而达到解题的目的。
相反方向指针经常用来求排序数组中的两数之和。
相同方向指针经常用来求正数数组中子数组的和或者乘积。
思路:要求三数之和,先求两数之和,固定变量i,求tagert - sum(j, k) = nums[i];如果i,j,k对应的和大于0,k向左移动,如果和小于0,j向右移动。
解题思路:初始化双指针,使其都指向数组第一个元素。如果子数组之间和大于等于k,左指针向右移动。如果小于k,右指针往前移动。
解题思路同题8
假设有一数组nums, 用sum[i] 记录前nums[0...i-1] 之和, 那么区间[i..j] 之间的和则为:sum[i...j] = sum[j+1] - sum[i];
利用hash map键值为数组累加和,值为扫描当前数组得下标。