题目描述
输入一个递增排序的数组和一个数字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}
}
网友评论