题目链接:https://leetcode.cn/problems/he-wei-sde-liang-ge-shu-zi-lcof/description/
文章目录
-
- 一、题目描述
- 二、解题思路
- [三、关键点 / 易错点](#三、关键点 / 易错点)
- 四、代码实现(Java)
- 五、总结
一、题目描述

二、解题思路
这道题的核心在于:这个数组是从小到大有序的,想到利用单调性和双指针来解题
具体思路如下:
- 第一步:定义一个left指针指向数组的第一个元素,定义一个right指针指向数组的最后一个元素
- 第二步:判断left和right指向的元素之和sum与目标值traget的大小;如果sum>target,就说明left右边的所有元素与right指向的元素之和都大于target,所以遇到这种情况可以让right--;如果sum<target,就让left++;如果相等就返回。
三、关键点 / 易错点
- 容易出错的地方:这题用两个for循环的暴力解法会超时
四、代码实现(Java)
java
class Solution {
public int[] twoSum(int[] price, int target) {
int n = price.length;
int left = 0;
int right = n-1;
while(left<right){
int sum = price[left]+price[right];
if(sum>target) right--;
else if(sum<target) left++;
else return new int[]{price[left],price[right]};
}
// 为了照顾编译器,这里再给他一个返回值
return new int[]{0};
}
}
五、总结
第一次做的时候用了暴力解法发现时间超时,后面经过思考利用双指针解答出了这道题,希望自己能每天检查刷力扣,提升自己的思维逻辑能力。