模板 #1:

int binarySearch(vector<int>& nums, int target){
if(nums.size() == 0)
return -1; int left = 0, right = nums.size() - 1;
while(left <= right){
// Prevent (left + right) overflow
int mid = left + (right - left) / 2;
if(nums[mid] == target){ return mid; }
else if(nums[mid] < target) { left = mid + 1; }
else { right = mid - 1; }
} // End Condition: left > right
return -1;
}

模板 #1 是二分查找的最基础和最基本的形式。这是一个标准的二分查找模板,大多数高中或大学会在他们第一次教学生计算机科学时使用。模板 #1 用于查找可以通过访问数组中的单个索引来确定的元素或条件。

关键属性


  • 二分查找的最基础和最基本的形式。
  • 查找条件可以在不与元素的两侧进行比较的情况下确定(或使用它周围的特定元素)。
  • 不需要后处理,因为每一步中,你都在检查是否找到了元素。如果到达末尾,则知道未找到该元素。

区分语法


  • 初始条件:left = 0, right = length-1
  • 终止:left > right
  • 向左查找:right = mid-1
  • 向右查找:left = mid+1

最新文章

  1. iOS开发之多种Cell高度自适应实现方案的UI流畅度分析
  2. Android 笔记 a+b day6
  3. S1java基础学习笔记
  4. PHP中include和require(转)
  5. asp.net 微信企业号办公系统-流程设计--流程步骤设置-事件设置
  6. poj-2393 Yogurt factory (贪心)
  7. @override
  8. ECshop模板机制
  9. Msys下gcc的配置
  10. 网络编程之TCP异步群聊:客户端代码
  11. jQuery validator plugin之Validator
  12. 5.数码相框-额外项目电子书总结,并使用svgalib库
  13. mysql 查询优化~ 分页优化讲解
  14. [Umbraco] macro(宏)在umbraco中的作用
  15. 如何优雅的控制goroutine的数量
  16. October 10th 2017 Week 41st Tuesday
  17. 什么是 Event Loop?
  18. Docker解决没有vi、vim等命令
  19. 执行impdp时出现的各种问题
  20. 【Unity3D】使用MD5值,确保本地Sqlite数据库内容没有被篡改

热门文章

  1. POJ1422
  2. 题解 CF1428F Fruit Sequences
  3. Spark3.0中Dates和Timestamps
  4. C#9.0新特性详解系列之六:增强的模式匹配
  5. 最短路径——BFS算法
  6. NMO not setuid-root (Unix-only)
  7. synchronized实现原理及ReentrantLock源码
  8. css 12-CSS3属性详解:动画详解
  9. 工具-chrome相关-安装crx包及错误解决(99.3.1)
  10. 老哥你能写篇 SpringCloud Alibaba 全家桶吗? 看视频太累 太枯燥了 !