【力扣】查找总价格为目标值的两个商品,双指针法

查找总价格为目标值的两个商品原题地址

方法一:双指针

这道题和力扣第一题“两数之和”非常像,区别是这道题已经把数组排好序了,所以不考虑暴力枚举和哈希集合的方法,而是利用单调性,使用双指针求解

考虑数组price的2个下标left和right,对于[left,right],有C_{right-left+1}^{2}种配对方法,我们需要利用单调性剔除一些可能

不妨设price[left]+price[right],考虑[left+1,right-1]范围内的下标(记为m),有price[left]+price[m]让left右移,在[left+1,right]的范围内寻找配对。同理,若price[left]+price[right]>target,考虑right和[left+1,right-1]范围内的下标(记为n),有price[right]+price[n]>price[right]+price[left]>target,所以right不可能与[left,right-1]的任何下标配对,此时让right左移,在[left,right-1]的范围内寻找配对

反复执行上述操作,直到left=right或者找到符合price[left]+price[right]=target的配对。

// 方法一:双指针
class Solution {
public:
    vector twoSum(vector& price, int target) {
        int left = 0, right = price.size() - 1;

        while (left < right)
        {
            if (price[left] + price[right] < target)
            {
                ++left;
            }
            else if (price[left] + price[right] > target)
            {
                --right;
            }
            else
            {
                return { price[left], price[right] };
            }
        }

        return {};
    }
};

你可能感兴趣的:(leetcode,算法,职场和发展)