代码随想录算法训练营第一天| 704. 二分查找、27. 移除元素

二分查找

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;
    }
}
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容