![](https://img-blog.csdnimg.cn/20201014180756925.png?x-oss-process=image/resize,m_fixed,h_224,w_224)
类型总结之——二分查找法
二分法
Mona______
好好学习天天向上 o(≧v≦)o
展开
-
leetcode——第162题——寻找峰值
题目:峰值元素是指其值大于左右相邻值的元素。给你一个输入数组 nums,找到峰值元素并返回其索引。数组可能包含多个峰值,在这种情况下,返回 任何一个峰值 所在位置即可。你可以假设 nums[-1] = nums[n] = -∞ 。class Solution {/*这两种方法都是使用了二分法的 左闭右开 [left, right)nums[i] > nums[i + 1],主要的精髓就在这句话,为了找到峰值,就需要考虑是处于局部升序还是局部降序当满足这个说明处于 局部降序,那么就需要原创 2021-05-29 15:43:43 · 79 阅读 · 0 评论 -
leetcode——第704题——二分查找
题目:给定一个 n 个元素有序的(升序)整型数组 nums 和一个目标值 target ,写一个函数搜索 nums 中的 target,如果目标值存在返回下标,否则返回 -1。class Solution {public: // int search(vector<int>& nums, int target) // { // // 区间定为 [left, right] // int left = 0, right = nums.原创 2021-05-25 16:04:13 · 116 阅读 · 0 评论 -
leetcode——第35题——二分查找法
题目:给定一个排序数组和一个目标值,在数组中找到目标值,并返回其索引。如果目标值不存在于数组中,返回它将会被按顺序插入的位置。你可以假设数组中无重复元素。示例 1:输入: [1,3,5,6], 5输出: 2示例 2:输入: [1,3,5,6], 2输出: 1示例 3:输入: [1,3,5,6], 7输出: 4示例 4:输入: [1,3,5,6], 0输出: 0class Solution {public: int searchInsert(vector<原创 2021-04-18 20:06:35 · 112 阅读 · 0 评论 -
剑指offer——第53-2——缺失的数字
题目:一个长度为n-1的递增排序数组中的所有数字都是唯一的,并且每个数字都在范围0~n-1之内。在范围0~n-1内的n个数字中有且只有一个数字不在该数组中,请找出这个数字。class Solution {/*这道题是把数组分成了两类,一类的 nums[i] == i,一类是 nums[i] != i一定是左边相等,右边不相等的情况,因此,就按照这个思路,取right边界 即可也就是找到 第一个 nums[i] != i 对应的下标 right 就是正好缺失的数字*/ public:原创 2021-05-25 23:19:06 · 108 阅读 · 0 评论 -
剑指offer——第53-1题——在排序数组中查找数字
题目:统计一个数字在排序数组中出现的次数。class Solution {/*方法一算是我第二次写,错误的地方就是在while循环里没写 return count导致一直循环出不来,当在 mid == target 之后,满足条件要及时返回啊这个是方法二的主要思想容易想到的方式就是分别用二分查找的方式去查找 target 在数组的左边界和右边界,然后将右边界减左边界即可得到结果分别查找 target 左边界和右边界的逻辑会有差异,这里可以取巧,变成分别查找 target-1 的右边界和原创 2021-05-25 22:33:40 · 60 阅读 · 0 评论 -
剑指offer——第11题——旋转数组的最小数字
题目:把一个数组最开始的若干个元素搬到数组的末尾,我们称之为数组的旋转。输入一个递增排序的数组的一个旋转,输出旋转数组的最小元素。例如,数组 [3,4,5,1,2] 为 [1,2,3,4,5] 的一个旋转,该数组的最小值为1。class Solution {/*1、比较的是 numbers[middle] 与 numbers[right],这样便于进行分类和操作2、旋转数组实际上可以划分为两个排序的子数组3、为什么是 right-- 缩小范围,而不是 left++ 因为数组是升序的,所原创 2021-05-25 21:49:41 · 82 阅读 · 0 评论 -
leetcode——第367题——有效地完全平方数
题目:给定一个 正整数 num ,编写一个函数,如果 num 是一个完全平方数,则返回 true ,否则返回 false 。进阶:不要 使用任何内置的库函数,如 sqrt 。class Solution {public: // 二分法的第一种写法 bool isPerfectSquare(int num) { // // // 不对不对不对 不对的解法 // // int res = exp(0.5 * log(num)); //原创 2021-05-25 20:48:25 · 85 阅读 · 0 评论 -
leetcode——第34题——在排序数组中查找元素的第一个和最后一个位置
题目:给定一个按照升序排列的整数数组 nums,和一个目标值 target。找出给定目标值在数组中的开始位置和结束位置。如果数组中不存在目标值 target,返回 [-1, -1]。进阶:你可以设计并实现时间复杂度为 O(log n) 的算法解决此问题吗?class Solution {public:// 法一::展开来写 vector<int> searchRange(vector<int>& nums, int target) {原创 2021-05-10 19:28:35 · 79 阅读 · 0 评论 -
leetcode——第69题——求平方根
题目:实现 int sqrt(int x) 函数。计算并返回 x 的平方根,其中 x 是非负整数。由于返回类型是整数,结果只保留整数的部分,小数部分将被舍去。class Solution {public: int mySqrt(int x) { // // 二分法,首先要有 左区间端点,右区间端点,中间点 // // 左闭右闭 // if(x == 0) return x; // int left = 1;原创 2021-05-10 16:21:49 · 507 阅读 · 0 评论