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

98 阅读1分钟

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

思路:最左边left 为 0 ,最右边 为 nums.length - 1,这是边界

数组的下标left和right,left往右移动,right往左边移动, 如果 nums[left] + nums[right] > target 说明打了,因为nums是单调递增的,所以应该减小right值,以至于缩小nums[left] + nums[right]它的值,如果发现 nums[left] + nums[right] < target 说明减多了,应该再增加点,于是left++, 依次类推,直到找到满足条件的 返回[nums[left], nums[right]]即可

const twoSum = (nums, target) => {
    let [left, right] = [0, nums.length - 1];
    while (left < right) {
        sum = nums[left] + nums[right];
        if (sum > target) {
            right--;
        } else if (sum < target) {
            left++;
        } else {
            return [nums[left], nums[right]];
        }
    }
};