题目描述
输入一个递增排序的数组和一个数字S,在数组中查找两个数,使得他们的和正好是S,如果有多对数字的和等于S,输出两个数的乘积最小的。
示例:
输入:target = 9 输出:[[2,3,4],[4,5]]
思路
1.这道题可以使用“双指针”的思想解决。
2.设置两个指针,分别指向首位两个元素。
- 当nums[low]+nums[high]==target时,返回双指针对应的数字
- 当 nums [ low] > target - nums [ high] 时,说明右边的值过大,high- 1
- 当 nums [ low] < target - nums [ high] 时,说明左边的值过小,low+ 1
Java代码实现
public class Solution { public int[] twoSum(int[] nums, int target) { int low = 0; int high = nums.length-1; while(low < high){ int cur = nums[low]+nums[high]; if(cur == target){ return new int[]{nums[low],nums[high]}; }else if(cur > target){ high--; }else{ low++; } } return new int[]{-1,-1}; } }
Golang代码实现
func twoSum(nums []int, target int) []int { low,high := 0,len(nums)-1 for low < high { curSum := nums[low] + nums[high] if curSum == target { return []int{nums[low],nums[high]} }else if curSum > target{ high-- }else { low++ } } return []int{-1,-1} }