目录
一:题目链接
题目要求找到数组的两个数字,加起来能够等于目标数字的值,再返回当前的两个数字结果。没有合适的两个数字就返回空数组。
二:题目思路
这里不使用暴力枚举解决,因为数字是按照升序记录的,所以,我们可以利用数组的单调性来解决问题,类似与我们前面所讲的 “题目链接”。

首先,定义两个指针,一个指向数组起始位置(left),另一个指向数组后一个元素的位置(right),再判断这两个位置的元素相加结果,会有三种情况。
第一种情况,这两个元素相加结果比目标值小,也就是当前数组区间最小的元素加上最大的元素结果比目标值小;或者说,由于数组是单调递增的,如果 left 不动,right 不断往前走再与 left 相加判断,结果一定是比目标值更小,所以,当前的 left 就可以舍弃了,直接 left++ 进入下一个新的判断区间。
第二种情况,这两个元素相加结果比目标值大,也就是当前数组区间最小的元素加上最大的元素结果比目标值大;或者说,由于数组是单调递增的,如果 right 不动,left 不断往后走再与 right 相加判断,结果一定是比目标值更大,所以,当前的 right 就可以舍弃了,直接 right-- 进入下一个新的判断区间。
第三种情况,这两个元素相加结果等于目标值。就可以直接返回当前的两个下标元素值了。
三:代码实现
int left = 0;
int right = price.length - 1;
while(left < right) {
if(price[left] + price[right] < target) {
left++;
}else if(price[left] + price[right] > target) {
right--;
}else {
return new int[] {price[left] , price[right]};
}
}
//未找到合适的两个数字,返回空数组
return new int[] {0};
1608

被折叠的 条评论
为什么被折叠?



