题目描述
解题思路
哈希表的空间复杂度O(n)
双指针O(1)
算法流程:
- 初始化: 双指针 i , j 分别指向数组 nums 的左右两端 (俗称对撞双指针)。
- 循环搜索: 当双指针相遇时跳出;
- 计算和 s = nums[i] + nums[j];
- 若 s > targett ,则指针 jj 向左移动,即执行 j = j - 1 ;
- 若 s < target ,则指针 ii 向右移动,即执行 i = i + 1 ;
- 若 s = target ,立即返回数组 [nums[i], nums[j]] ;
- 若循环结束,则返回空数组,代表无和为 targettarget 的数字组合。
class Solution {
/**
* 双指针法
*
* @param nums
* @param target
* @return
*/
public int[] twoSum(int[] nums, int target) {
int left = 0;
int right = nums.length - 1;
while (left <= right) {
if (nums[left] + nums[right] > target) {
right--;
} else if (nums[left] + nums[right] < target) {
left++;
}else {
return new int[]{nums[left],nums[right]};
}
}
return new int[]{};
}
}