1,两数之和
思路:主要利用双指针,在排序后的列表中进行O(n)的搜索。
class Solution {
public:
vector<int> twoSum(vector<int>& numbers, int target) {
int l = 0;
int r = numbers.size()-1;
//双指针
while(l<r){
if(numbers[l]+numbers[r]==target)
break;
else if(numbers[l]+numbers[r] < target)
l++;
else
r--;
}
vector<int> ret={
l+1,r+1};
return ret;
}
};
2,平方和
思路:类似于双指针从两端遍历;
内存溢出解决方法:采用long定义 r和l或者采用相减判断;
class Solution {
public:
int judgeSquareSum(int c) {
long r = floor(sqrt(c));
long l = 0;
bool flag = false;
while(l<=r){
if(r*r+l*l == c){
flag=true;
break;
}
else if(r*r+l*l < c)
l++;
else
r--;
}
return flag;
}
};