二分查找
704.二分查找
二分查找主要注意区间问题,以左闭右闭为例,left<=right区间是有效的,所以while条件应该加入等号,当移动left和right指针时,由于是闭区间已经考虑过两端情况,所以left=middle+1,或者right=middle-1
class Solution {
public int minSubArrayLen(int target, int[] nums) {
int left = 0;
int result = nums.length + 1;
int sum = 0;
/*
以窗口右边界为循环,当窗口内大于target时,窗口左边界缩小,直到窗口内
的值不满足条件,然后移动窗口右边界,进入下一个循环
*/
for (int right=0; right<nums.length; right++) {
sum += nums[right];
while(sum >= target) {
result = Math.min(result, right-left+1);
sum -= nums[left++];
}
}
return result == nums.length + 1 ? 0 : result;
}
}
移除元素
27. 移除元素
因为题目说明可以忽略多于新数组后面的部分,所以采用双指针方法,快指针遍历原数组,慢指针指向新数组的元素
class Solution {
public int removeElement(int[] nums, int val) {
int slow = 0;
for (int fast=0; fast<=nums.length-1; fast++) {
if (nums[fast] != val) {
nums[slow++] = nums[fast];
}
}
return slow;
}
}