
代码:
class Solution {
    public int[] twoSum(int[] price, int target) {
        int length=price.length;
        int left=0;
        int right=length-1;
        while (left<right){
            if(price[left]+price[right]>target){
                right--;
            }else if(price[left]+price[right]<target){
                left++;
            }else {
                break;
            }
        }
        return new int[]{price[left],price[right]};
    }
} 
题解:
题目中给出了很关键的信息就是,购物车内的商品价格按照升序记录于数组 price
我们可以利用有序数组的单调性和双指针来解决该问题,通过示例2 给出的数据 8, 21, 27, 34, 52, 66 进行讲解
首先让 L 指针指向下标为 0 的数,这是数组中最小的数,让 R 指针指向下标为 price.length - 1 的数,这是数组中最大的数,计算 8+66 =74 > 61,此时 L 指针指向的已经是最小的数了,所以要让 R- - ,淘汰 66
8 21 27 34 52 66 target=61
L R
R- - 以后指向 52,此时 8+52 = 60 < 61 ,此时 R 指针指向的已经是最大的数了,所以要让 L+ +,淘汰 8
8 21 27 34 52 66 target=61
L R
一直循环上述的操作,直到 price[ L ] + price[ R ] = target 为止
8 21 27 34 52 66 target=61
L R


















