题目链接
LCR 179. 查找总价格为目标值的两个商品 - 力扣(LeetCode)
题目解析
1> 给的数组是有序的
2> 只要返回任意一个结果即可
算法原理
解法一:
暴力(连续俩个for):枚举所有的情况:O(n^2)
解法二:
因为数组有序,因此我们利用单调性,使用双指针算法来解决问题O(n)
1> 定义left,right,sum
2> 判断sum和target的大小
sum <target left++;
sum> target right--;
sum = target 返回最终结果
代码编写
class Solution {
public static int[] twoSum(int[] price, int target) {
//返回的结果数组
int[] res = new int[2];
//此时给定的数组是有序的
//定义left和right
int left = 0;
int right = price.length -1;
while (left < right) {
int sum = price[left] + price[right];
if(sum < target) {
//此时说明我们要增大这个数,因此,我们移动left
left++;
}else if (sum > target){
//此时说明我们要减小这个数,因此,我们移动right
right--;
}else {
//此时相等,我们就保存它们,并且结束循环
res[0] = price[left];
res[1] = price[right];
break;
}
}
return res;
}
}
注意:
注意这一行不能写在循环上面,不然这个sum就是一个固定值了,sum是会随着left和right指向的不同元素而进行变化的