二分法
Leetcode按tag练题
BNDSllx
算法自媒体公众号:GTAlgotirhm,欢迎关注转发!
https://mp.weixin.qq.com/s?__biz=Mzg3NzMzNzU1MA==&mid=2247484346&idx=3&sn=7a3cf5f25cb8df7a958842369b4faca4&chksm=cf25cd1bf852440d4d68b75b023d547b568c06d830f0f0fff50b216d73fa3bd848ace6e7cc28&token=1029780947&lang=zh_CN#rd
展开
-
牛客巅峰赛第7场-牛牛的独特子序列
牛牛的独特子序列解法1:前缀和 + 二分思路:包含三个字母的子序列问题不好考虑,我们来想一下如果简单化为 a,ba, ba,b 两个字母的情况。也即如何在给定字符串中找到最长的形如 anbna^n b^nanbn 的子序列。这个问题的 O(n)O(n)O(n) 复杂度方法是,遍历字符串每一个位置 indexindexindex,以该位置为 a,ba, ba,b 字母的分界线,取该位置以前字母 aaa 出现的次数,以及该位置以后字母 bbb 出现的次数(提前维护前缀和,获取出现次数复杂度为 O(1)原创 2020-12-08 22:01:05 · 208 阅读 · 1 评论 -
Leetcode 719. 找出第 k 小的距离对 题解
题目链接:添加链接描述找第k小就套二分找第k小的“距离”,就对距离二分,最小为0,最大为排序后数组头尾元素之差。开心的写一个if(check(mid))先放着,具体怎么实现check()慢慢想。由于要找第k小,所以思路是对每一个mid,找小于等于它的数对有多少组,如果 > k则应该缩小mid(以使更多数对差大于mid),所以主函数就写好了(check为真则 r = mid - 1, ...原创 2020-05-08 14:20:25 · 208 阅读 · 0 评论 -
Leetcode 436. 寻找右区间 题解
题目链接:https://leetcode-cn.com/problems/find-right-interval/以“左端点优先升序,右端点其次升序”的顺序对二维数组排序(要注意记录下标,因为最后要按原顺序输出)。遍历,二分搜索最小的满足条件左端点即可。代码如下:class Solution {public: //新学到的,调用时要加 static 声明静态函数 stat...原创 2020-05-07 22:13:37 · 132 阅读 · 0 评论 -
Leetcode 222. 完全二叉树的节点个数 题解
题目链接:https://leetcode-cn.com/problems/count-complete-tree-nodes/二分搜索,先求深度,然后在最后一层的元素中二分,用check函数确定值是否存在。check函数中,通过要查找数值与根节点值的大小关系确定下一步去左子树还是右子树。特判空树和深度为1的树。代码如下:/** * Definition for a binary t...原创 2020-05-07 09:19:07 · 98 阅读 · 0 评论 -
Leetcode 658. 找到 K 个最接近的元素 题解
题目链接:https://leetcode-cn.com/problems/find-k-closest-elements/二分 + 双指针第一步二分,找到离 x 最近的元素(维护了两个变量 bi 和 ls,标记每次找到的大于 x 的最小元素和小于 x 的最大元素,这样二分结束后可根据这两个变量确定选取哪一个指针指向的元素)第二步双指针,以第一步找到的元素为中心,向两边扩展 k 个位置,然...原创 2020-05-06 12:38:55 · 161 阅读 · 0 评论 -
Leetcode 34. 在排序数组中查找元素的第一个和最后一个位置 题解
题目链接:https://leetcode-cn.com/problems/find-first-and-last-position-of-element-in-sorted-array/与典型二分不同,搜到之后还要接着搜。最开始我的思路是搜到一个之后在两边继续二分,但是这样太乱了。之后受启发可以分别求两端点,定义一个二分函数,找到之后根据参数确定下一步往哪边继续搜索。代码如下:class...原创 2020-05-05 22:39:13 · 80 阅读 · 0 评论 -
Leetcode 33. 搜索旋转排序数组 题解
题目链接:https://leetcode-cn.com/problems/search-in-rotated-sorted-array/由于数组相当于乱序,所以要先找到被打乱的位置。所以第一步二分搜索,找到那个大于数组最末元素的位置,例如示例1中就是那个7的下标。下一步去判断target是在前一部分还是后一部分(分别与数组第一个元素和最后一个元素比较),然后根据所在位置直接二分查找。需要...原创 2020-05-05 21:52:57 · 128 阅读 · 0 评论 -
Leetcode 29. 两数相除 题解
题目链接:https://leetcode-cn.com/problems/divide-two-integers/二分,与模版不同的是,这次的二分左右指针实际上是被除数和除数,例如示例1中,先判断10 > 3,则再判断 10 > 6? 再判断 10 > 12? 以此类推(相当于右指针 * 2),当判断大于为否后,将被除数减去最大已知的幂次,再继续循环(相当于左指针 - 右指...原创 2020-05-05 16:59:23 · 106 阅读 · 0 评论 -
Leetcode 1011. 在 D 天内送达包裹的能力 题解
题目链接:添加链接描述二分搜运力:左指针初始化为最大重量(不然最大的那个运不了),右指针初始化为总重量(假设一天全运完)每次贪心计算当前运力需要的最大天数(因为要求最小运力,所以贪心时直接求最大天数即可),并更新左右指针代码如下:class Solution {public: int shipWithinDays(vector<int>& weights,...原创 2020-05-05 13:57:35 · 179 阅读 · 2 评论 -
Leetcode 1351. 统计有序矩阵中的负数 题解
题目链接:https://leetcode-cn.com/problems/count-negative-numbers-in-a-sorted-matrix/暴力法是 O(mn) 的复杂度,即一个一个遍历算count写一个二分函数findn找每行的第一个负值元素,并将其下标返回,作为下一行二分查找的右指针起始点。复杂度为O(m * lgn)代码如下:class Solution {...原创 2020-05-04 23:35:04 · 176 阅读 · 0 评论 -
Leetcode 1337. 方阵中战斗力最弱的 K 行 题解
题目链接:https://leetcode-cn.com/problems/the-k-weakest-rows-in-a-matrix/想了半天没想明白跟二分有什么关系,看了题解才明白,用二分先找每一行最后一个军人(查找1)代码如下:class Solution {public: int power(vector<int> v) { int l =...原创 2020-05-04 21:19:25 · 126 阅读 · 0 评论 -
Leetcode 69. x 的平方根 题解
题目链接:https://leetcode-cn.com/problems/sqrtx/二分二分,我还是喜欢果断流代码如下:class Solution {public: int mySqrt(int x) { if(x == 1 || x == 2) { return 1; } int l = 0, r =...原创 2020-05-04 19:12:45 · 286 阅读 · 0 评论 -
Leetcode 35. 搜索插入位置 题解
题目链接:https://leetcode-cn.com/problems/search-insert-position/开始练二分啦!双模版:果断流class Solution {public: int searchInsert(vector<int>& nums, int target) { if(target < nums[0...原创 2020-05-04 15:31:05 · 140 阅读 · 0 评论