题目:
分析:
看完题想了一会,就差不多想到了双指针,一道不错的双指针题目。
刚开始想的时候感觉
固定前面的指针,后面的指针向前移动
或者
固定后面的指针,前面的指针向前移动
但是提交后根据错误提示发现。
两个要结合,当前后相加大于目标值,应该缩小,则后面的往前移动。
当小于目标值的时候,应该增大,则前面的应该往后移动。
虽然能想出来,但是希望下次思路更加全面。
代码:
class Solution {
public:
int maxOperations(vector<int>& nums, int k) {
sort(nums.begin(),nums.end());
int b=0;
int e=nums.size()-1;
int all=0;
while(b<e)
{
if(nums[b]+nums[e]==k){
b++;
e--;
all++;
continue;
}
while(nums[b]+nums[e]<k)
{
b++;
}
while(b<e&&nums[b]+nums[e]>=k)
{
if(nums[b]+nums[e]==k)
{
b++;
e--;
all++;
break;
}
e--;
}
}
return all;
}
};