文章目录

  • 题目描述
  • 思路 & 代码
    • Summary
    • 二刷

题目描述

  • 考虑了一下,还是把这道题作为单独一篇文了。
  • 主要是配合这篇题解一起理解二分法,实践太少理解还不够透彻,还是要温故知新= =

思路 & 代码

  • 先贴代码,结合注释和下面的总结食用~
class Solution {public int searchInsert(int[] nums, int target) {// 插到最后面的情况特殊考虑if(target > nums[nums.length - 1]){return nums.length;}// 二分法:找到第一个 >= target 的值的下标int left = 0, right = nums.length - 1;// 保证结束的时候 left == rightwhile(left < right){// 可读性 & 防止 left + right 溢出int mid = left + (right - left) / 2;// 区间划分成:[left, mid], [mid + 1, right]// 当 mid < target 时,直接舍弃这部分的值(不需要)if(nums[mid] < target){left = mid + 1;}// mid >= target 时,保留 midelse{right = mid;}}return left;}
}

Summary

  • int mid = left + (right - left) / 2,可读性 & 防止 left + right 溢出。(位运算好像其实不会变快
  • 区间划分,两种情况:
  1. left = mid + 1 && right = mid => [left, mid] && [mid + 1, right],这种情况 mid 要向下取整,防止[left, mid] == [left, right]的情况导致死循环
  2. left = mid && right = mid - 1 => [left, mid - 1] && [mid, right],这种情况向上取整,防止
    [mid, right] == [left, right]的情况导致死循环
  • 区间为什么不分成三个部分:结束时不一定有 left == right
  • 出现死循环时,可以输出 left、right、mid来分析
  • 更多内容可见这篇题解

二刷

  • 很痛苦,上面的 Summary 真的很重要(特别是死循环部分的向上取整、向下取整)
class Solution {public int searchInsert(int[] nums, int target) {if(target > nums[nums.length - 1]) {return nums.length;}int left = 0, right = nums.length - 1;while(left < right) {int mid = (left + right) / 2;if(nums[mid] < target) {left = mid + 1;}else {right = mid;}}return left;}
}

【LeetCode笔记】35. 搜索插入位置(Java、二分法)相关推荐

  1. 【LeetCode】35. 搜索插入位置---JavaScript解法

    [LeetCode]35. 搜索插入位置-JavaScript解法 原题链接:https://leetcode-cn.com/problems/search-insert-position/ /*** ...

  2. LeetCode Algorithm 35. 搜索插入位置

    35. 搜索插入位置 Ideas 题目中给的提示已经很清楚了,要求时间复杂度是O(log n),这不是指着鼻子跟我说:给老子用二分查找嘛! Code Python def searchInsert(s ...

  3. LeetCode 题 - 35. 搜索插入位置

    搜索插入位置 给定一个排序数组和一个目标值,在数组中找到目标值,并返回其索引.如果目标值不存在于数组中,返回它将会被按顺序插入的位置. 你可以假设数组中无重复元素. 示例 1: 输入: [1,3,5, ...

  4. 力扣(LeetCode) 35. 搜索插入位置

    给定一个排序数组和一个目标值,在数组中找到目标值,并返回其索引.如果目标值不存在于数组中,返回它将会被按顺序插入的位置. 你可以假设数组中无重复元素. 示例 1: 输入: [1,3,5,6], 5 输 ...

  5. 【LeetCode】35. 搜索插入位置(C++实现)

    传送门:https://leetcode-cn.com/problems/search-insert-position/ 一.题目描述 给定一个排序数组和一个目标值,在数组中找到目标值,并返回其索引. ...

  6. leetcode 35. 搜索插入位置(二分法搜索失败的情况)

    35. 搜索插入位置 思路:二分查找 模板: 如果查找成功,返回target在nums中的下标 //二分查找模板 //nums[0..n-1]为有序数组,target为目标 int left=0; i ...

  7. LeetCode (二分小专题)33搜索旋转排序数组34在排序数组中查找元素的第一个和最后一个位置35搜索插入位置

    前言 国庆前最后一次打卡,国庆后继续开启,公众号bigsai回复进群欢迎加入打卡,如有帮助记得点赞收藏. 近期打卡记录: LeetCode 32最长有效括号(困难) (本周) LeetCode 30串 ...

  8. ARTS-23(35. 搜索插入位置,SELU激活函数,本周几个问题, 招商银行财报分析)

    Algorithm https://leetcode-cn.com/problems/search-insert-position/ 35. 搜索插入位置 给定一个排序数组和一个目标值,在数组中找到目 ...

  9. 力扣35. 搜索插入位置python实现

    35. 搜索插入位置 一.问题描述 二.算法思想   题目中的数组是排好序的,从头开始遍历,当发现列表中元素的值与target相等时返回该元素在列表中的位置i,否则继续查找,当发现列表中的元素比tar ...

  10. LeetCode-二分查找-35. 搜索插入位置

    35. 搜索插入位置 思路:二分查找 class Solution {public:int searchInsert(vector<int>& nums, int target) ...

最新文章

  1. linux删去分区的文件夹,如何恢复 Linux 分区下误删的文件?
  2. (13)python 字典 2 分钟速解
  3. leetcode162. 寻找峰值(二分法)
  4. 07-R语言jiebaR包的分词学习
  5. php连接access带密码,phpadodb连接带密码access数据库实例,测试成功
  6. python tkinter背景图片_如何在tkinter中有背景图像和按钮?
  7. PyTorch Cookbook by Eric
  8. 大数据之Oozie——源码分析(一)程序入口
  9. android 常用代码
  10. PS快速切换证件照背景颜色
  11. 通俗易懂理解有限状态自动机 FSA 的表示和原理
  12. 怎么在b站引流?b站怎么吸粉?b站引流技巧和方法
  13. C语言及程序设计 套餐 课程主页
  14. 一部《小猪佩奇》让中国90%的家长感到惭愧
  15. Java HotSpot 虚拟机选项 -X -XX 的含义
  16. 汇编-ARMv8架构指令集
  17. idea前进和撤销快捷键
  18. win10读取不了U盘或者移动硬盘的解决方法
  19. RDP、VNC、SPICE协议性能分析之网络带宽
  20. maven 3.5.3 settings.xml

热门文章

  1. python 格式化工具_小而美的 Python 格式化工具--black
  2. linux 中如何查看块设备,在linux中,如何确定使用块设备的进程?
  3. vue 找回密码_vue实现个人信息查看和密码修改功能
  4. matlab中GUIDE的UItable居中方法
  5. 国产统一操作系统(UOS)安装、体验
  6. Python 学习编程 【for语句breakcontinue语句使用】(一)
  7. 菜鸟教程 之 JavaScript 教程
  8. risc系统服务器,精简的高端 解析四大RISC服务器处理器
  9. oracle10g新建数据,Oracle10g手工创建数据库
  10. mysql stdistance_postgis的geography_columns和geometry_columns有什么区别