题目:
分析:
- 解法一: 暴力解法, 将每两个的和都算出来, 判断是否为目标值
- 解法二:
- 数组中的数是按升序排序的, 我们可以定义左右指针
- 如果和小于目标值, 则应该让和变大, 所以左指针右移
- 如果和大于目标值, 则应该让和变小, 所以右指针左移
思路:
- 定义left = 0, right = price.length-1
- 循环计算price[left] + price[right], 直到left和right相遇
- 如果>目标值, 则right--
- 如果<目标值, 则left++
- 如果== 目标值, 则返回
代码:
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 return new int[]{price[left],price[right]};
}
return null;
}
}