对撞双指针
条件:nums是排序数组,因此可以使用双指针法将空间复杂度降低至O(1).
算法流程
初始化:双指针i,j分别指向数组的左右两端(俗称对撞双指针)。
循环搜索:当双指针相遇跳出;
- 计算和 s = nums[i] + nums[j];
- 若 s > target , 则指针j向左移动,即执行 j = j - 1;
- 若 s < target , 则指针i向右移动,即执行 i = i + 1;
- 若 s = target , 立即返回数组[nums[i], nums[j]];
返回空数组,代表没有和为target的数组组合
1 | public int[] twoSum(int[] nums, int target) { |