双指针
class Solution {
public int[] twoSum(int[] nums, int target) {
int left = 0;
int right = nums.length -1;
int sum = 0;
while(left != right){
sum = nums[left] + nums[right];
if(sum > target){
right--;
}else if(sum < target){
left++;
}else{
return new int[]{nums[left],nums[right]};
}
}
return new int[]{};
}
}
剑指 Offer 57 - II. 和为s的连续正数序列
用滑动窗口来做。
class Solution {
public int[][] findContinuousSequence(int target) {
List<int[]> res = new ArrayList();
int left = 1;
int right = 2;
int sum = left+right;
while(left < right && right < target){
while(sum > target && left < target/2){
sum-=left;
left++;
}
if(sum == target){
res.add(process(left,right));
}
right++;
sum+=right;
}
return res.toArray(new int[res.size()][]);
}
public int[] process(int begin,int end){
int[] res = new int[end-begin+1];
for(int i = begin; i <= end; i++ ){
res[i-begin] = i;
}
return res;
}
}