和为S的两个数字

作者: youzhihua | 来源:发表于2020-03-03 15:04 被阅读0次

    题目描述

    输入一个递增排序的数组和一个数字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}
    }
    

    相关文章

      网友评论

        本文标题:和为S的两个数字

        本文链接:https://www.haomeiwen.com/subject/enfhlhtx.html