思路:
L指向左侧,R指向右侧。
对于每个L来说,如果发生了右移,那么R也会相对的左移,因为target是不变的,L增大了,R一定减小,所以具有单调性,可以使用双指针。
代码:
class Solution {
public:
vector<int> twoSum(vector<int>& nums, int target) {
int n = nums.size();
for(int i = 0,j = n-1; i < j; i++){
//j具有单调性
while(i + 1 < j && nums[i] + nums[j - 1] >= target) j--;
if(nums[i] + nums[j] == target) return{nums[i],nums[j]};
}
return {};
}
};
评论区