
二分
文章平均质量分 61
二分经典题
重you小垃
这个作者很懒,什么都没留下…
展开
-
leetcode35. 搜索插入位置(简单,找插入位置,不同写法)
二分:库函数跟 leetcode leetcode704. 二分查找(查找某个元素,简单,不同写法)区间不同,这里的[l, r] 是 [0, n] 而不是[0, n - 1]https://blog.youkuaiyun.com/zhangjiaji111/article/details/125601772右边界n是越界数组的,因此只能用右闭:左闭右闭 或者 左开右闭1:左开右闭2:左闭右闭注意的地方:......原创 2022-07-04 19:03:45 · 130 阅读 · 0 评论 -
leetcode704. 二分查找(查找某个元素,简单,不同写法)
要点:始终维护的区间和初始时的位置是一样的即可。1:左开右开2:左闭右闭3:左开右闭4:左闭右开原创 2022-07-04 17:04:13 · 153 阅读 · 0 评论 -
leetcode33.搜索旋转排序数组(中等)
解法1:暴力从左到右搜索。解法2:二分搜索。思路: 由于至少能保证一边是有序的,所以可以用二分;对不是有序的那一边,同样的道理,至少能保证一般是有序的,不断把规模缩小class Solution {public: int search(vector<int>& nums, int target) { int left = -1, right = nums.size(); while (left + 1 < rig..原创 2021-09-23 22:51:04 · 139 阅读 · 0 评论 -
leetcode34.在排序数组中查找元素的第一个和最后一个位置(中等)
解法1:双指针思路:从左向右遍历即可。易错点:1:长度为0时单独判断2:更新right时,index可能移动到n,此时也需要单独考虑class Solution {public: vector<int> searchRange(vector<int>& nums, int target) { vector<int> ans; int left = -1, right = -1; int n ..原创 2021-09-28 10:20:47 · 388 阅读 · 0 评论 -
leetcode4.寻找两个正序数组的中位数(困难)
自己的思路:时间复杂度O(m +n)根据归并排序的一部分,将两个正序数组合并,然后,根据数组长度奇偶性返回中位数。小技巧:当数组长度为奇数时,返回~ 为偶数时返回~ ,可以用条件表达式代替if判断。比如上面的代码可以被简化成:题目要求时间复杂度O(log(m+n))优化:二分,复杂度优化到O(log(m+n))思路: 对较短的数组进行二分查找。具体步骤为:对两个数组都画条线,两条线左边的部分为左半部分,右边的为右半部分,对较短的数组(nums1)进行二分i,这样在nums2中对应的位置j就确定了,原创 2021-10-16 12:25:20 · 202 阅读 · 2 评论 -
leetcode240.搜索二维矩阵(中等)
自己的思路:右上角或者左下角进行搜索----------------->时间O(m+n)左下角为例:如果matrix[x][y]小于tagert,y++;否则x–;class Solution {public: bool searchMatrix(vector<vector<int>>& matrix, int target) { int m = matrix.size(), n = matrix[0].size(....原创 2021-11-09 19:42:15 · 127 阅读 · 0 评论 -
offer 04二维数组中的查找(中等)
class Solution {public: bool findNumberIn2DArray(vector<vector<int>>& matrix, int target) { //vector二维数组行数: size(matrix)-1 列数: size(matrix[0])-1 /*矩阵中有两个特殊的元素: 1.右上角元素(小于它的数字都在左边,大于它的数字都在下边) 2.左下角..原创 2020-11-30 20:13:08 · 111 阅读 · 0 评论 -
leetcode786第k个最小的素数(困难)
报错:runtime error: addition of unsigned offset to 0x602000000130 overflowed to 0x60200000012c (stl_vector.h)意思是,vector下标出现了小于0的数字查找比他小的数字,双指针的方法class Solution {public: bool satisfy(vector<int> a, double m, int K); //小于他的个数大于等于K返回true vect.原创 2020-11-24 13:07:27 · 510 阅读 · 0 评论 -
leetcode410.分割数组的最大值(困难)
class Solution {public: int satisfy(vector<int> a, int n, int m); int splitArray(vector<int>& nums, int m) { //即找出一个整数,比它小的数字分组个数大于m,比它大的小于等于m,符合二分的思想,返回的是R //L初值取max(a)-1最好了,即不管分多少组都不满足, R初值取sum(nums) ,无论分成多少组每组都小.原创 2020-11-20 00:46:48 · 237 阅读 · 0 评论 -
leetcode374猜数字大小(简单)
猜数字游戏的规则如下:每轮游戏,我都会从 1 到 n 随机选择一个数字。 请你猜选出的是哪个数字。如果你猜错了,我会告诉你,你猜测的数字比我选出的数字是大了还是小了。你可以通过调用一个预先定义好的接口 int guess(int num) 来获取猜测结果,返回值一共有 3 种可能的情况(-1,1 或 0):-1:我选出的数字比你猜的数字小 pick < num1:我选出的数字比你猜的数字大 pick > num0:我选出的数字和你猜的数字一样。恭喜!你猜对了!pick == num示例原创 2020-11-02 21:10:20 · 377 阅读 · 0 评论 -
leetcode275. H指数(中等)
给定一位研究者论文被引用次数的数组(被引用次数是非负整数),数组已经按照 升序排列 。编写一个方法,计算出研究者的 h 指数。h 指数的定义: “h 代表“高引用次数”(high citations),一名科研人员的 h 指数是指他(她)的 (N 篇论文中)总共有 h 篇论文分别被引用了至少 h 次。(其余的 N - h 篇论文每篇被引用次数不多于 h 次。)"示例:输入: citations = [0,1,3,5,6]输出: 3思路:满足条件的最大值 ,想到二分代码如下:class Solu原创 2020-11-02 20:45:19 · 159 阅读 · 0 评论 -
leetcode455.分发饼干(简单)
假设你是一位很棒的家长,想要给你的孩子们一些小饼干。但是,每个孩子最多只能给一块饼干。对每个孩子 i,都有一个胃口值 g[i],这是能让孩子们满足胃口的饼干的最小尺寸;并且每块饼干 j,都有一个尺寸 s[j] 。如果 s[j] >= g[i],我们可以将这个饼干 j 分配给孩子 i ,这个孩子会得到满足。你的目标是尽可能满足越多数量的孩子,并输出这个最大数值。示例 1:输入: g = [1,2,3], s = [1,1]思路:题目出现了 尽可能多,想到二分查找,返回L代码如下:cla原创 2020-11-02 20:33:17 · 516 阅读 · 0 评论 -
leetcode287.寻找重复数(中等)
自己的思路:hash 时间O(n),不满足题目空间O(1)!!!class Solution {public: int findDuplicate(vector<int>& nums) { //用hash,每遍历到一个数字,判断之前是否出现过 unordered_set<int> ust; for (auto& m: nums) { if (!ust.count(m)) ust.i..原创 2021-11-11 11:33:08 · 488 阅读 · 0 评论 -
leetcode153.寻找旋转排序数组中的最小值(中等)
思路一: O(n)从左向右遍历,如果nums[i]<nums[i-1]则返回nums[i];思路二: 二分 O(nlogn)满足二分的思路:一个不包含重复元素的升序数组在经过旋转之后,可以得到下面可视化的折线图,横坐标是下标,纵坐标是元素值。将最后一个元素当作x,在下标i的右侧均小于等于x ,在下标i的左侧均大于x 。因此满足二分的条件!class Solution {public: int findMin(vector<int>& nums) { ...原创 2021-11-25 21:15:27 · 108 阅读 · 0 评论