算法006——和为S 的两个数
力扣——查找总价格为目标值的两个商品点击跳转
注意题目中的关键信息升序
我们利用双指针,不管 target 是多少,让一个指针指向最小值,让一个指针指向最大
那么,共有三种情况
我们首先遇到的是第二种情况
-
sum < target
left 与最大值相加都小于 target ,此时中间的数都小于 right,那么 left 无论与中间的哪个数相加,都是小于 target 的 ,此时 left 是没用的,让 left ++
-
sum > target
right 与最小值相加都大于 target,此时中间的数都大于 left ,那么 right 无论与中间的哪个数相加 都会大于 target ,此时 right 是没用的,让 right –
-
sum = target
代码如下
class Solution {
public int[] twoSum(int[] price, int target) {
int left = 0;
int right = price.length - 1;
while(left < right){
if(price[left] + price[right]> target){
right--;
}else if(price[left] + price[right] < target){
left++;
}else{
int[] arr = new int[]{price[left],price[right]};
return arr;
}
}
return new int[]{0}; //力扣编译器认为上面的返回值只有else情况才能满足,所以为了照顾编译器,这里要有一个返回值
}
}
完成!