当前位置: 首页 > article >正文

lccc总结

二分总结

二分总结,以35为例,升序数组,无重复元素,给定target,如果存在,则找出下标,否则找到需要插入的索引。

统一用左开右闭。

法1:< = > 三种情况考虑,循环结束的时候,left==right,但是需要额外考虑,结束的时候,left处的元素,是否>=target。

public int searchInsert(int[] nums, int target) {
        int n = nums.length;
        if(target>nums[n-1]) return n;
        if(target<nums[0]) return 0;
        int left = 0;
        int right = n-1;
        while(left<right){
            int mid = (right+left)/2;
            if(nums[mid]==target) return mid;
            else if(nums[mid]>target){
                right = mid-1;
            }else if(nums[mid]<target){
                left = mid+1;
            }
        }
        return nums[left] >= target?left:left+1;
    }

法2、3 用排除法

第一种写法是找出第一个>=target的索引,第二种写法是找出最后一个<=target的索引,如何区分呢,看排除法那个区间是怎么变的

public int searchInsert(int[] nums, int target) {
        int n = nums.length;
        if(target>nums[n-1]) return n;
        if(target<nums[0]) return 0;
        int left = 0;
        int right = n-1;
        while(left<right){
            int mid = (right+left)/2;
            if(nums[mid]<target){
                left = mid + 1;
            }else{
                right = mid;
            }
        }
        return left;
    }
public int searchInsert(int[] nums, int target) {
        int n = nums.length;
        if(target>nums[n-1]) return n;
        if(target<nums[0]) return 0;
        int left = 0;
        int right = n-1;
        while(left<right){
            int mid = (right+left+1)/2;
            if(nums[mid]>target){
                right = mid - 1;
            }else{
                left = mid;
            }
        }
        return nums[left] == target?left:left+1;
    }

http://www.kler.cn/a/349040.html

相关文章:

  • java真的正在越来越失去竞争力了吗
  • python基础——并发编程
  • 五、Linux之Vi和Vim编辑器
  • 第四十一章 创建安全对话 - 使用 SecurityContextToken
  • HTTP代理与HTTP协议的区别详解
  • MATLAB智能优化算法-学习笔记(5)——蚁群算法求解容量受限的车辆路径问题
  • SpringBoot环境下购物推荐网站的高效开发策略
  • 数据结构-4.4.朴素模式匹配算法
  • OpenAI 公布了其新 o1 模型家族的元提示(meta-prompt)
  • Docker在linux系统中的下载与使用
  • Android笔记(二十四)基于Compose组件的MVVM模式和MVI模式的实现
  • 教程|插件的搜索与使用(0基础)
  • 【尚硅谷】FreeRTOS学习笔记(更新中更新时间2024.10.12)
  • 【LeetCode】每日一题 2024_10_15 三角形的最大高度(枚举、模拟)
  • SpringBoot项目热部署-devtools
  • QTableView列单元格根据内容调整大小,表头可拖动,设置表头填充满,单元格单选
  • # 执行 rpm -qa | grep qq 查询软件安装情况时报错 数据库损坏 db3 error(-30974)
  • 【Java】单例模式详解与实践
  • Spring Boot异步任务、任务调度与异步请求线程池的使用及原理
  • JAVA基础 day13 多线程