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