
搜索-二分搜索
搜索-二分搜索
tzyshiwolaogongya
这个作者很懒,什么都没留下…
展开
-
leetcode162——Find Peak Element
题目大意:在给出的数组中找出峰值的索引,假设nums[-1]=nums[n]=-∞,如果有多个返回任意一个即可,要求时间复杂度O(logn),。分析:二分查找。时间复杂度O(logn)自然联想二分查找。利用好题里的-∞条件来不断缩小搜索空间:拿到mid,判断nums[mid]和右侧数据的大小关系,如果降序,说明峰值在[left,mid];如果升序,说明峰值在[mid+1,right]。代码:方法一:线性查找。class Solution {public: int findPeak原创 2020-07-07 16:04:28 · 157 阅读 · 0 评论 -
leetcode240——Search a 2D MatrixⅡ
题目大意:在二维矩阵中找目标值,二维矩阵每行从左到右升序,每列从上到下升序。分析:从左下角出发,如果当前值大于target,向上走(因为当前值右、下都比当前值大);如果当前值小于target,向右走(因为当前值左、上都比当前值小)。直到找到target返回true或直到走出边界返回false。代码:class Solution {public: bool searchMat...原创 2020-03-15 09:54:08 · 143 阅读 · 0 评论 -
leetcode74——Search a 2D Matrix
题目大意:在一个升序的二维数组中是否存在目标值分析:二分搜索。将二维数组展开就是简单的一维数组二分法查值。代码:class Solution {public: bool searchMatrix(vector<vector<int>>& matrix, int target) { int m = matrix.size(); int n = matrix[0]....原创 2018-05-17 13:27:51 · 147 阅读 · 0 评论 -
leetcode50——Pow(x, n)
题目大意:求x的整数n次幂分析:二分法的思想。因为常规循环n次会超时。所以考虑将求解一分为二,递归即可。代码:JAVA转载自https://blog.youkuaiyun.com/happyaaaaaaaaaaa/article/details/51655964public class Solution { public double myPow(double x, int n) {...原创 2018-04-20 17:22:56 · 143 阅读 · 0 评论 -
leetcode4——Median of Two Sorted Arrays
题目大意:给出两个升序数组,以O(log(m+n))求出数组中所有数的中位数分析:如果不要求时间复杂度,可以用归并求解,归并排序的时间复杂度是O(m+n)。要以O(log(m+n))的时间复杂度求解需要使用二分搜索。找中位数=>找切分点,将所有数分成长度相同的两半。 left_part | right_partA[0], A[1], .....原创 2018-04-03 20:09:56 · 157 阅读 · 0 评论 -
leetcode69——Sqrt(x)
题目大意:求出所给非负数的平方根,如果平方根不是整数,则返回值只截取整数部分分析:数学考察+二分搜索。代码:注意不要用int,否则mid*mid可能会溢出class Solution {public: int mySqrt(int x) { long long left = 0, right = x; while (left <= ri...原创 2018-05-12 13:49:45 · 168 阅读 · 0 评论 -
leetcode81——Search in Rotated Sorted Array II
题目大意:在有重复元素的递增旋转数组中,判断目标数字是否存在分析:二分搜索。和leetcode33类似,leetcode33判断nums[left]和nums[mid]可以得出mid左侧还是右侧递增的结论,但由于这道题数组中包含重复元素,所以要多考虑一种情况,也就是nums[left]=nums[mid]时如何操作,此时判断不出有序区间,所以使得left加一,看看下一步是否能够判断。代码:转载自h...原创 2018-05-27 13:25:48 · 159 阅读 · 0 评论