【LeetCode笔记】35. 搜索插入位置(Java、二分法)
文章目录
- 题目描述
- 思路 & 代码
- 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 溢出。(位运算好像其实不会变快
- 区间划分,两种情况:
- left = mid + 1 && right = mid => [left, mid] && [mid + 1, right],这种情况 mid 要向下取整,防止[left, mid] == [left, right]的情况导致死循环
- 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、二分法)相关推荐
- 【LeetCode】35. 搜索插入位置---JavaScript解法
[LeetCode]35. 搜索插入位置-JavaScript解法 原题链接:https://leetcode-cn.com/problems/search-insert-position/ /*** ...
- LeetCode Algorithm 35. 搜索插入位置
35. 搜索插入位置 Ideas 题目中给的提示已经很清楚了,要求时间复杂度是O(log n),这不是指着鼻子跟我说:给老子用二分查找嘛! Code Python def searchInsert(s ...
- LeetCode 题 - 35. 搜索插入位置
搜索插入位置 给定一个排序数组和一个目标值,在数组中找到目标值,并返回其索引.如果目标值不存在于数组中,返回它将会被按顺序插入的位置. 你可以假设数组中无重复元素. 示例 1: 输入: [1,3,5, ...
- 力扣(LeetCode) 35. 搜索插入位置
给定一个排序数组和一个目标值,在数组中找到目标值,并返回其索引.如果目标值不存在于数组中,返回它将会被按顺序插入的位置. 你可以假设数组中无重复元素. 示例 1: 输入: [1,3,5,6], 5 输 ...
- 【LeetCode】35. 搜索插入位置(C++实现)
传送门:https://leetcode-cn.com/problems/search-insert-position/ 一.题目描述 给定一个排序数组和一个目标值,在数组中找到目标值,并返回其索引. ...
- leetcode 35. 搜索插入位置(二分法搜索失败的情况)
35. 搜索插入位置 思路:二分查找 模板: 如果查找成功,返回target在nums中的下标 //二分查找模板 //nums[0..n-1]为有序数组,target为目标 int left=0; i ...
- LeetCode (二分小专题)33搜索旋转排序数组34在排序数组中查找元素的第一个和最后一个位置35搜索插入位置
前言 国庆前最后一次打卡,国庆后继续开启,公众号bigsai回复进群欢迎加入打卡,如有帮助记得点赞收藏. 近期打卡记录: LeetCode 32最长有效括号(困难) (本周) LeetCode 30串 ...
- ARTS-23(35. 搜索插入位置,SELU激活函数,本周几个问题, 招商银行财报分析)
Algorithm https://leetcode-cn.com/problems/search-insert-position/ 35. 搜索插入位置 给定一个排序数组和一个目标值,在数组中找到目 ...
- 力扣35. 搜索插入位置python实现
35. 搜索插入位置 一.问题描述 二.算法思想 题目中的数组是排好序的,从头开始遍历,当发现列表中元素的值与target相等时返回该元素在列表中的位置i,否则继续查找,当发现列表中的元素比tar ...
- LeetCode-二分查找-35. 搜索插入位置
35. 搜索插入位置 思路:二分查找 class Solution {public:int searchInsert(vector<int>& nums, int target) ...
最新文章
- linux删去分区的文件夹,如何恢复 Linux 分区下误删的文件?
- (13)python 字典 2 分钟速解
- leetcode162. 寻找峰值(二分法)
- 07-R语言jiebaR包的分词学习
- php连接access带密码,phpadodb连接带密码access数据库实例,测试成功
- python tkinter背景图片_如何在tkinter中有背景图像和按钮?
- PyTorch Cookbook by Eric
- 大数据之Oozie——源码分析(一)程序入口
- android 常用代码
- PS快速切换证件照背景颜色
- 通俗易懂理解有限状态自动机 FSA 的表示和原理
- 怎么在b站引流?b站怎么吸粉?b站引流技巧和方法
- C语言及程序设计 套餐 课程主页
- 一部《小猪佩奇》让中国90%的家长感到惭愧
- Java HotSpot 虚拟机选项 -X -XX 的含义
- 汇编-ARMv8架构指令集
- idea前进和撤销快捷键
- win10读取不了U盘或者移动硬盘的解决方法
- RDP、VNC、SPICE协议性能分析之网络带宽
- maven 3.5.3 settings.xml
热门文章
- python 格式化工具_小而美的 Python 格式化工具--black
- linux 中如何查看块设备,在linux中,如何确定使用块设备的进程?
- vue 找回密码_vue实现个人信息查看和密码修改功能
- matlab中GUIDE的UItable居中方法
- 国产统一操作系统(UOS)安装、体验
- Python 学习编程 【for语句breakcontinue语句使用】(一)
- 菜鸟教程 之 JavaScript 教程
- risc系统服务器,精简的高端 解析四大RISC服务器处理器
- oracle10g新建数据,Oracle10g手工创建数据库
- mysql stdistance_postgis的geography_columns和geometry_columns有什么区别