![](https://img-blog.csdnimg.cn/20201014180756927.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
二分查找
冷眼观world
社畜
展开
-
【简单】搜索插入位置
class Solution {public: int left_bound(vector<int>& nums, int target) { int left = 0, right = nums.size(); while (left < right) { int mid = left + (right - left) / 2; if (nums[mid] == ..原创 2021-12-18 14:08:20 · 41 阅读 · 0 评论 -
【简单】二分查找
class Solution {public: int search(vector<int>& nums, int target) { int left = 0, right = nums.size(), mid; while (left < right) { mid = left + (right - left) / 2; if (nums[mid] == target).原创 2021-12-15 14:41:21 · 279 阅读 · 0 评论 -
【简单】第一个错误版本
// The API isBadVersion is defined for you.// bool isBadVersion(int version);class Solution {public: int firstBadVersion(int n) { int left = 1, right = n; while (left < right) { int mid = left + (right - left.原创 2021-12-21 13:54:32 · 32 阅读 · 0 评论 -
【中等】在排序数组中查找元素的第一个和最后一个位置
class Solution {public: int left_bound(vector<int>& nums, int target) { int left = 0, right = nums.size(); while (left < right) { int mid = left + (right - left) / 2; if (nums[mid] == t.原创 2021-12-17 14:29:58 · 56 阅读 · 0 评论 -
【中等】搜索二维矩阵
class Solution {public: bool binarySearch(vector<int>& nums, int target) { int left = 0, right = nums.size(); while (left < right) { int mid = left + (right - left) / 2; if (nums[mid] ..原创 2021-12-19 15:44:51 · 55 阅读 · 0 评论 -
【中等】搜索二维矩阵II
class Solution {public: bool binarySearch(vector<int> &nums, int &target) { int left = 0, right = nums.size(); while (left < right) { int mid = left + (right - left) / 2; if (nums[..原创 2021-12-20 14:51:21 · 156 阅读 · 0 评论 -
【中等】寻找峰值
如果nums[mid + 1]大于num[mid],则一定能在大于等于nums[mid + 1]的区域找到一个峰值,为什么?因为如果nums[mid + 1] > num[mid],则nums[mid + 2]要么大于nums[mid + 1],要么小于nums[mid + 1]。如果小于,则nums[mid + 1]就是峰值,如果大于就继续往后找。有人要问一直大于怎么办,也就是呈递增趋势,别忘了题目要求nums[-1] = nums[n] = -∞,如果一直递增,则nums[n - 1]一定是峰值.原创 2021-12-23 14:10:20 · 165 阅读 · 0 评论 -
【中等】爱吃香蕉的珂珂(抽象二分问题)
明确题目,要求在h小时内吃的最多,用时最长根据题意可以知道:珂珂吃香蕉的速度越小,耗时越多。反之,速度越大,耗时越少,这就抽象成一个函数,x轴是吃香蕉的速度,y轴是吃香蕉的时间,可以知道这是一条随着x增加,y减小的递减函数图像;我们要找的是速度。因为题目限制了珂珂一个小时之内只能选择一堆香蕉吃,因此速度最大值就是这几堆香蕉中,数量最多的那一堆。速度的最小值是1,也就是一小时只吃一根;还是因为珂珂一个小时之内只能选择一堆香蕉吃,因此:每堆香蕉吃完的耗时 = 这堆香蕉的数量 / 珂珂一小时吃香蕉的数..原创 2021-12-25 15:50:34 · 743 阅读 · 0 评论 -
【中等】在D天内送达包裹的能力(抽象二分问题)
按步骤来确定函数图像:确定自变量。题目问什么,什么就是自变量,所以这里船的运载能力就是自变量x。运输天数和运载能力成反比。target是运输天数,我们要在f(x) == D的限制下求出船最小载重x的范围。即最小载重和最大载重,left肯定是所有货物中最大的那个,因为至少得装一个货物。最大的就是所有货物的总重量,也就是一次就把货物全带走的极端情况所以题目又变成了和875爱吃香蕉的珂珂一样,在单调递减函数中,f(x) == D的条件下,求最小的承载能力xclass Solution {pu..原创 2021-12-29 01:10:03 · 368 阅读 · 0 评论