双指针算法
1、常规写法:这是i,j从0开始扫,j<i的扫法
for(int i=0,j=0,i<n;i++){
while(j<i&&check(i,j)) j++;
}
2、这是i,j分别两端的写法
for(int i=0,j=n-1;i<j;i++){
while(check()) j--;
}
或者也能这样写
int i=0,j=-1;
while(i<j){
if(check(i,j)) i++;
else j--;
}
Leetcode 633
题目描述
给定一个非负整数 c ,你要判断是否存在两个整数 a 和 b,使得 a2+b2a2+b2 = c
样例
示例1:
输入: 5
输出: True
解释: 1 * 1 + 2 * 2 = 5
示例2:
输入: 3
输出: False
boolean judgeSquareSum(int c){
boolean res = false;
int l = 0, r = Math.sqrt(c);
while(l<=r){
while(l*l+r*r > c) r--;
if(l*l+r*r == c){
res = true;
return res;
}
l++;
}
return res;
}