
折半查找
飘来荡去、、
这个作者很懒,什么都没留下…
展开
-
x的平方根
首先开方后的数肯定小于原数的一半,然后在之间进行折半查找,查找某一个数的平方等于x。但是因为int范围的限制,不能做乘法,用除法来判断;如果折半查找完成后任然没有找到,那么返回high位置的数即可。class Solution { public int mySqrt(int x) { if (x == 0 || x == 1){ retur...原创 2019-01-06 14:28:05 · 430 阅读 · 0 评论 -
在排序数组中查找元素的第一个和最后一个位置
数组有序,时间复杂度要求为,使用折半查找。一、查什么?目标值的开始位置和结束位置,普通的折半查找只能判断目标值是否在数组当中,在的话返回其下标,但是这里面的数组有重复值,所以要对折半查找进行改造。二、怎么查?先查目标值的开始位置。如何定义开始位置?如果在数组中找到目标值的位置,然后判断它左边位置上的数是否和目标值相等:如果不相等,那么此时目标值的位置就是开始位置;如果相...原创 2019-01-06 17:52:33 · 1208 阅读 · 2 评论 -
寻求峰值
寻找中间值大于左右值,且时间复杂度为O(logN),想到使用折半查找。折半查找/*折半查找*/int Binary_Search(int a*,int n,int key){ int low,high,mid; low=1; /*定义最底下标为记录首位*/ high=n; /*定义最高下标为记录末位*/ while(low<...原创 2019-01-02 13:49:52 · 272 阅读 · 0 评论 -
搜索二维矩阵
思路:题目已经说的很直接了,每一行都是升序,且每一列也是升序,所以可以使用折半查找。但是不可能对每一行都进行查找,要先定位到target可能在的那一行,然后再对这一行进行折半查找。如何定位?根据数组的最后一列,找到第一个比target值大的数所处的行,那么target极有可能就在这一行。同时如果在最后一列就找到了target值,那么直接返回即可。代码:class Solution {...原创 2019-01-03 14:34:56 · 181 阅读 · 0 评论 -
搜索旋转排序数组
方法还是使用折半查找。一、怎么查?因为折半查找的前提条件是数组必须有序,但是现在数组旋转了,如果可以让数组恢复顺序,那么直接折半查找就可以了。二、怎么恢复?首先想到的是:找到数组的最小值,然后根据数组长度来重新定位low和high,这样就可以满足折半查找的要求。以【4,5,6,7,0,1,2】为例,最小值的下标是4。那么,(7是数组的长度),然后计算;但是还需要判断一下是否...原创 2019-01-08 17:31:14 · 175 阅读 · 0 评论 -
寻找重复数
折半查找一、如何确定一个数是否重复?因为所有数字都在范围内,那么我们可以判断出重复数字在哪一个范围内。判断方法是:先得到的中间数,然后在中进行搜索,统计小于等于的个数,记为如果,说明重复数字在区间内如果,说明重复数字在区间内最终的重复数字就是。二、代码class Solution { public int findDuplicate(int[] num...原创 2019-01-09 13:07:50 · 506 阅读 · 0 评论