| |
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
-> 数据结构与算法 -> LeetCode——1.数组1:二分查找(35.搜索插入位置) -> 正文阅读 |
|
[数据结构与算法]LeetCode——1.数组1:二分查找(35.搜索插入位置) |
? 目录 ? 数组数组是存放在连续内存空间上的相同类型数据的集合。 数组可以方便的通过下标索引的方式获取到下标下对应的数据。 注意
二分查找使用条件
二分法的边界问题比较重要,关于区间的定义一般有两种,一种是左闭右闭[left,right],第二种左闭右开[left,right),这就涉及到循环条件和right值的处理不同 mid防止溢出: 左闭右闭[left,right]:int mid = left + ((right - left) / 2); 左闭右开[left,right):int mid = left + ((right - left) >> 1); 方法以LeetCode?704.二分查找为例
1.左闭右闭[left,right] target在[left,right]区间内,所以left=right是有意义的,所以,循环条件和right值的处理:
例:查找元素1 704.二分查找的Java代码
2.左闭右开[left,right) target在[left,right)区间内,所以left=right没有意义的,所以,循环条件和right值的处理:
例:查找1元素 704.二分查找的Java代码
35.搜索插入位置
上面的母题会了之后,这道题就很简单了,思路基本一样,唯一的不同就是当目标值不存在时函数的返回值。这里也可以讨论两种区间的情况。 1.左闭右闭[left,right] 前面的思路一样,现在来还原最差的情况(最后一次循环):目标值不存在。例:查找元素2 模拟最后一次left=right的循环,mid指向的值小于目标值2,所以left会更新为mid+1,此时的值就是目标值应该在的位置,让函数值返回left。找目标值7的时候同理。 Java代码
2.左闭右开[left,right) 还原最差的情况(最后一次循环):目标值不存在,例:查找元素7? 此时是最后一次循环的情况,mid指向的值小于目标值,所以left会向右移一位,所以,函数的返回值是left/right均可。 Java代码
? ? ? ? ? ? |
|
|
上一篇文章 下一篇文章 查看所有文章 |
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 | -2024/11/25 21:16:42- |
|
网站联系: qq:121756557 email:121756557@qq.com IT数码 |