日常学习:
购物车内的商品价格按照升序记录于数组 price。请在购物车中找到两个商品的价格总和刚好是 target。若存在多种情况,返回任一结果即可。
示例 1:
输入:price = 3, 9, 12, 15, target = 18
输出:3,15 或者 15,3
示例 2:
输入:price = 8, 21, 27, 34, 52, 66, target = 61
输出:27,34 或者 34,27
思路:
解法1(暴力算法):固定第一个数,依次循环后面的数,直至和为target
伪代码:
for(i=0;i<n;i++)
for(j=i+1;j<n;j++)
check(pricei+pricej==target)
解法2(双指针算法):利用单调性,使用双指针算法(left,right),直至sum(priceleft+priceright)为target
情况1:sum>target:right--
情况2:sum<target:left++
情况3:sum=target:return priceleft,priceright
伪代码:
int left=0,right=price.length-1;
while(left<right){
int sum=priceleft+priceright;
if(sum>target) right--;
else if(sum<target) left++;
else return new int\[\] {priceleft,priceright};
}
return new int\[\]{0};