剑指Offer-57 和为s的两个数字

379 阅读1分钟

题意

输入一个递增排序的数组和一个数字s,在数组中查找两个数,使得它们的和正好是s。如果有多对数字的和等于s,则输出任意一对即可。

示例

输入:nums = [2,7,11,15], target = 9
输出:[2,7] 或者 [7,2]

输入:nums = [10,26,30,31,47,60], target = 40
输出:[10,30] 或者 [30,10]

解答

双指针法


class Solution {
    public int[] twoSum(int[] nums, int target) {

	// 前后指针 
        int left = 0;
        int right = nums.length -1;
        
	// 指针相遇结束查找
        while(left < right){

	    // 存两指针之和 
            int temp = nums[left] + nums[right];

	    // 等于目标值,给出前后指针值
	    // 因为数据已排序,小于则前索引+1 ,大于则尾部索引-1
            if(temp == target){
                return new int[]{nums[left], nums[right]};
            }else if(temp < target){
                left ++;
            }else{
                right --;
            }
        }

        return new int[]{};

    }
}