算法原理:
其实我们首先想到的方法肯定是暴力,两个for循环嵌套就能找到,但肯定会超时。
其实啊一切算法的总结都是在暴力的基础上进行的,算法其实就是对暴力进一步的优化。
定义两个指针,分别指向两端,然后拿两端值的和和target进行比较,如果target更大:则需要将left++,反之right- -,原理其实很简单:我们知道该数组是升序排列的,因此他的最左边肯定是最小的数,最右边肯定是最大的数,如果此时他们相加的和都要小于target了,肯定是要增大这个和的,而此时只有将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;
}
}