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

704.二分查找

力扣题目链接:https://leetcode.cn/problems/binary-search/

核心:

  使用二分法

前提:

  1)数组为有序数组

  2)数组中无重复元素。

二分法区间的定义:

  左闭右闭、左闭右开

心得:

  1)边界条件容易混乱

  2)第二次做这道题目了,还是做错了,理解不够深刻!!!

要点总结:

  左边界left、右边界right、数组长度length、中间下标middle

区间 左边界初始值 右边界初始值 while条件 移动左边界 移动右边界
左闭右闭 0 length left<=rigth left=middle+1 right=middle-1
左闭右开 0 length-1 left<right left=middle+1 right=middle

 左闭右闭:

class Solution {
    public int search(int[] nums, int target) {
        int len = nums.length;
        int l = 0;
        int r = len-1;
        while(l <= r){
            int m = l+(r-l)/2;
            if(target == nums[m]){
                return m;
            }
            else if(nums[m] < target){
                l = m+1;
            }
            else if(nums[m] > target){
                r = m-1;
            }
            System.out.println("l="+l);
            System.out.println("r="+r);
            System.out.println("r="+m);
        }
        return -1;
    }
}

左闭右开:

class Solution {
    public int search(int[] nums, int target) {
        int len = nums.length;
        int l = 0;
        int r = len;
        while(l < r){
            int m = l+(r-l)/2;
            if(target == nums[m]){
                return m;
            }
            else if(nums[m] < target){
                l = m+1;
            }
            else if(nums[m] > target){
                r = m;
            }
            System.out.println("l="+l);
            System.out.println("r="+r);
            System.out.println("r="+m);
        }
        return -1;
    }
}

27.移除元素

力扣题目链接:https://leetcode.cn/problems/remove-element/

核心:

  双指针

心得:

  1)双指针做出来了

class Solution {
    public int removeElement(int[] nums, int val) {
        int len = 0;
        for(int i=0;i<nums.length;i++){
            if(nums[i] !=  val){
                nums[len] = nums[i];
                len++;
            }
        }
        return len;
    }
}

  2)暴力解法反而有问题,下标 i 忘记了向前移动

 

 

 

 

posted @ 2023-02-01 23:10  橙子的房东  阅读(121)  评论(0)    收藏  举报