日常学习:
购物车内的商品价格按照升序记录于数组 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(price[i]+price[j]==target)
解法2(双指针算法):利用单调性,使用双指针算法(left,right),直至sum(price[left]+price[right])为target
情况1:sum>target:right--
情况2:sum<target:left++
情况3:sum=target:return price[left],price[right]
伪代码:
int left=0,right=price.length-1;
while(left<right){
int sum=price[left]+price[right];
if(sum>target) right--;
else if(sum<target) left++;
else return new int[] {price[left],price[right]};
}
return new int[]{0};