代码随想录算法训练营第一天【数组】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 @   橙子的房东  阅读(102)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· DeepSeek 开源周回顾「GitHub 热点速览」
· 物流快递公司核心技术能力-地址解析分单基础技术分享
· .NET 10首个预览版发布:重大改进与新特性概览!
· AI与.NET技术实操系列(二):开始使用ML.NET
· 单线程的Redis速度为什么快?
点击右上角即可分享
微信分享提示