LeetCode 二分查找模板 III
模板 #3:
int binarySearch(vector<int>& nums, int target){
    if (nums.size() == 0)
        return -1;
    int left = 0, right = nums.size() - 1;
    while (left + 1 < right){
        // Prevent (left + right) overflow
        int mid = left + (right - left) / 2;
        if (nums[mid] == target) {
            return mid;
        } else if (nums[mid] < target) {
            left = mid;
        } else {
            right = mid;
        }
    }
    // Post-processing:
    // End Condition: left + 1 == right
    if(nums[left] == target) return left;
    if(nums[right] == target) return right;
    return -1;
}
模板 #3 是二分查找的另一种独特形式。 它用于搜索需要访问当前索引及其在数组中的直接左右邻居索引的元素或条件。
关键属性
- 实现二分查找的另一种方法。
- 搜索条件需要访问元素的直接左右邻居。
- 使用元素的邻居来确定它是向右还是向左。
- 保证查找空间在每个步骤中至少有 3 个元素。
- 需要进行后处理。 当剩下 2 个元素时,循环 / 递归结束。 需要评估其余元素是否符合条件。
区分语法
- 初始条件:left = 0, right = length-1
- 终止:left + 1 == right
- 向左查找:right = mid
- 向右查找:left = mid
LeetCode 二分查找模板 III的更多相关文章
- LeetCode 二分查找模板 I
		模板 #1: int binarySearch(vector<int>& nums, int target){ if(nums.size() == 0) return -1; in ... 
- LeetCode 二分查找模板 II
		模板 #2: int binarySearch(vector<int>& nums, int target){ if(nums.size() == 0) return -1; in ... 
- leetcode二分查找问题整理
		自从做完leetcode上的三道关于二分查找的题后,我觉得它是比链表找环还恶心的题,首先能写出bugfree代码的人就不多,而且可以有各种变形,适合面试的时候不断挑战面试者,一个程序猿写代码解决问题的 ... 
- leetcode 二分查找
		https://oj.leetcode.com/problems/search-for-a-range/就是一个二分查找,没事练练手 public class Solution { public in ... 
- [leetcode]二分查找总结
		Search for a Range 1.最简单的想法,用最普通的二分查找,找到target,然后向左右扩张,大量的重复的target,就会出现O(n)效率. class Solution { pub ... 
- leetcode 二分查找  Search in Rotated Sorted ArrayII
		Search in Rotated Sorted Array II Total Accepted: 18500 Total Submissions: 59945My Submissions Follo ... 
- Leetcode 二分查找 Search Insert Position
		本文为senlie原创,转载请保留此地址:http://blog.csdn.net/zhengsenlie Search Insert Position Total Accepted: 14279 T ... 
- leetcode 二分查找 Search in Rotated Sorted Array
		Search in Rotated Sorted Array Total Accepted: 28132 Total Submissions: 98526My Submissions Suppose ... 
- 线段树离散化  unique + 二分查找 模板  (转载)
		离散化,把无限空间中有限的个体映射到有限的空间中去,以此提高算法的时空效率. 通俗的说,离散化是在不改变数据相对大小的条件下,对数据进行相应的缩小.例如: 原数据:1,999,100000,15:处理 ... 
随机推荐
- 【APIO2019】路灯(ODT & (树套树 | CDQ分治))
			Description 一条 \(n\) 条边,\(n+1\) 个点的链,边有黑有白.若结点 \(a\) 可以到达 \(b\),需要满足 \(a\to b\) 的路径上的边不能有黑的.现给出 \(0\ ... 
- 图论-zkw费用流
			图论-zkw费用流 模板 这是一个求最小费用最大流的算法,因为发明者是神仙zkw,所以叫zkw费用流(就是zkw线段树那个zkw).有些时候比EK快,有些时候慢一些,没有比普通费用流算法更难,所以学z ... 
- Java8新特性探索之新日期时间库
			一.为什么引入新的日期时间库 Java对日期,日历及时间的处理一直以来都饱受诟病,尤其是它决定将java.util.Date定义为可修改的以及将SimpleDateFormat实现成非线程安全的. 关 ... 
- MySQL事务提交流程
			有binlog的CR方式(重点核心!!): 有binlog情况下,commit动作开始时,会有一个Redo XID 的动作记录写到redo,然后写data到binlog,binlog写成功后,会将bi ... 
- django添加检查用户名和手机号数量接口
			1.1 在user/urls.py中添加 urlpatterns = [ path('count/', views.RegCountView.as_view()), # 查询用户名手机号使用量的视图, ... 
- 解决idea 中web项目无法正常显示的问题
- 持久层之 MyBatis: 第一篇:快速入门
			MyBatis入门到精通 JDBC回顾 1.1.认识MyBatis 1.1.使用IDEA创建maven工程 1.2.引入mysql依赖包 1.3.准备数据 1.4 使用JDBC手写MyBatis框架 ... 
- SQL:我为什么慢你心里没数吗?
			SQL 语句执行慢的原因是面试中经常会被问到的,对于服务端开发来说也是必须要关注的问题. 在生产环境中,SQL 执行慢是很严重的事件.那么如何定位慢 SQL.慢的原因及如何防患于未然.接下来带着这些问 ... 
- 10 个 GitHub 上超火的 CSS 奇技淫巧项目,找到写 CSS 的灵感!
			大家好,我是你们的 超级猫,一个不喜欢吃鱼.又不喜欢喵 的超级猫 ~ 如果 CSS 是女孩子,肯定如上图那样吧 
- ASP.NET Core WebAPI实现本地化多语言(单资源文件)
			在Startup ConfigureServices 注册本地化所需要的服务AddLocalization和 Configure<RequestLocalizationOptions> p ... 
