二分法

这一节主要来研究一下二分查找,二分查找的思想很简单,但是在实现时需要注意几个问题:

  1. 在计算mid时不能使用mid=(l+h)/2,因为这样可能会导致加法溢出,应该使用mid=l+(h-l)/2
  2. 对于h的赋值与循环条件有关,当条件为l<=h时,h=mid-1,当l<h时,h=mid。解释如下:在循环条件为l<=h的情况下,当h=mid时会出现循环无法退出的情况,例如当l=1,h=1,此时mid也等于1,执行h=mid会出现无限循环。在循环条件为l<h时,如果h=mid-1,会错误跳过要查找的数,例如对于数组[1,2,3],要查找1,最开始l=0,h=2,mid=1,判断key<arr[mid],执行h=mid-1=0,此时结束循环跳过要查找的数。
  3. l的赋值一般都为l=mid+1

求开方:LeetCode第69题

求开方

题目如上图所示,一个数的开方sqrt一定在0至x之间,并且满足sqrt==x/sqrt。可以利用二分查找在0~x之间查找sqrt。
代码

摆硬币:LeetCode第441题

摆硬币

题目描述:第i行摆i个,统计能够摆满的行数


代码

有序数组的Single Element:LeetCode第540题

有序数组

题目描述:有序数组只有一个数不出现两次,找出这个数


代码
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

友情链接更多精彩内容