难度等级:简单
上一篇算法:
力扣此题地址:
1.题目:和为s的两个数字
输入一个递增排序的数组和一个数字s,在数组中查找两个数,使得它们的和正好是s。如果有多对数字的和等于s,则输出任意一对即可。
示例 1:
输入:nums = [2,7,11,15], target = 9 输出:[2,7] 或者 [7,2]
2.解题思路:
条件:递增排序数组,找出两个数字相加和为给定的值s
因为是递增排序的数组,所以我们可以用双指针来解题,left指针和right指针
left指向数组最左元素,right指向数组最右元素。用左指针元素和右指针元素相加的结果来判断指针移动。
while(left < right){
如果两个元素相加等于目标值,则直接返回
如果两个元素相加大于目标值,则右指针向左移动。
如果两个元素相加小于目标值,则左指针向右移动。
}
3.代码实现:
class Solution {
public int[] twoSum(int[] nums, int target) {
int left = 0;
int right = nums.length - 1;
while (left < right) {
int cur = nums[left] + nums[right];
if (cur == target)
return new int[]{nums[left], nums[right]};
else if (cur > target)
right--;
else
left++;
}
return new int[]{};
}
}