二分搜索
使用二分搜索方法解决具体问题
zhangxiaojiakele
这个作者很懒,什么都没留下…
展开
-
leetcode:二叉搜索树最近公共祖先
题目来源:力扣题目描述:给定一个二叉搜索树, 找到该树中两个指定节点的最近公共祖先。百度百科中最近公共祖先的定义为:“对于有根树 T 的两个结点 p、q,最近公共祖先表示为一个结点 x,满足 x 是 p、q 的祖先且 x 的深度尽可能大(一个节点也可以是它自己的祖先)。”审题:该题目要求在二叉搜索树中查找指定两节点的公共祖先.对于二叉搜索树,其左子树节点值均小于当前节点值,右子树节点...原创 2020-03-26 10:52:11 · 133 阅读 · 0 评论 -
leetcode: 二叉搜索树中第k小的元素
题目来源:力扣题目要求:给定一个二叉搜索树,编写一个函数 kthSmallest 来查找其中第 k 个最小的元素。说明:你可以假设 k 总是有效的,1 ≤ k ≤ 二叉搜索树元素个数。审题:看到这道题,我一开始想到,由于二叉树的左子树节点值均小于当前节点值,因此当前节点由小到大排序的次序即是其其左子树节点个数.因此,如果当前节点的排名大于次序k,我们便在左子树继续寻找,如果等于排名...原创 2020-03-25 21:55:16 · 220 阅读 · 0 评论 -
leetcode:完全二叉树节点个数
题目来源:力扣题目描述:给出一个完全二叉树,求出该树的节点个数。说明:完全二叉树的定义如下:在完全二叉树中,除了最底层节点可能没填满外,其余每层节点数都达到最大值,并且最下面一层的节点都集中在该层最左边的若干位置。若最底层为第 h 层,则该层包含 1~ 2h 个节点。审题:此题为求树中节点个数,可以直接使用递归方法计算树中遍历树中所有节点,计算节点总个数.该方法时间复杂度为O(N)...原创 2020-03-25 17:24:29 · 604 阅读 · 0 评论 -
leetcode:搜索旋转数组(2)
题目来源:力扣之前写过一篇搜索旋转数组的博文,详见链接,题目中,假定了数组中无重复值,因此我们可以很容易地判断数组中具体哪一部分是有序的.该篇文章讲解对于可能包含重复值的旋转数组,如何快速判断给定值是否存在.题目描述:假设按照升序排序的数组在预先未知的某个点上进行了旋转。( 例如,数组 [0,0,1,2,2,5,6] 可能变为 [2,5,6,0,0,1,2] )。编写一个函数来判断给定...原创 2020-03-25 15:04:12 · 129 阅读 · 0 评论 -
leetcode:探索二维矩阵
题目来源:力扣题目描述:编写一个高效的算法来判断 m x n 矩阵中,是否存在一个目标值。该矩阵具有如下特性:每行中的整数从左到右按升序排列。每行的第一个整数大于前一行的最后一个整数。审题:由于矩阵的特性,我们将其按行展开便可得到一维的按升序排序的数组,因此使用标准的二分搜索方法以时间复杂度O(lgM+lgN)解决,其中M为矩阵行数,N为矩阵列数.这种方法很自然也很容易便能想到...原创 2020-03-24 23:11:31 · 301 阅读 · 0 评论 -
leetcode:在排序数组中查找元素的第一个和最后一个位置
题目来源:力扣题目描述:给定一个按照升序排列的整数数组 nums,和一个目标值 target。找出给定目标值在数组中的开始位置和结束位置。你的算法时间复杂度必须是 O(log n) 级别。如果数组中不存在目标值,返回 [-1, -1]。审题:由于题目要求算法时间复杂度必须为O(lgN)级别,因此只能考虑采取二分搜索方法.使用二分搜索方法搜索具有重复值的上下边界是一类很常见的问题,...原创 2020-03-24 20:27:23 · 169 阅读 · 0 评论 -
leetcode:搜索旋转排序数组
题目来源:力扣题目描述:假设按照升序排序的数组在预先未知的某个点上进行了旋转。( 例如,数组 [0,1,2,4,5,6,7] 可能变为 [4,5,6,7,0,1,2] )。搜索一个给定的目标值,如果数组中存在这个目标值,则返回它的索引,否则返回 -1 。你可以假设数组中不存在重复的元素。你的算法时间复杂度必须是 O(log n) 级别。审题:首先题目明确要求算法时间复杂度必须是...原创 2020-03-24 19:38:41 · 96 阅读 · 1 评论 -
leetcode:在D天内送包裹的能力
题目来源:力扣题目描述:传送带上的包裹必须在 D 天内从一个港口运送到另一个港口。传送带上的第 i 个包裹的重量为 weights[i]。每一天,我们都会按给出重量的顺序往传送带上装载包裹。我们装载的重量不会超过船的最大运载重量。返回能在 D 天内将传送带上的所有包裹送达的船的最低运载能力。该题目与另一力扣习题吃香蕉类似,大家如果感兴趣可以比较一下.审题:1.题目中提到包裹必须按...原创 2020-03-24 17:22:19 · 369 阅读 · 0 评论 -
leetcode:基于时间的键值存储类
题目来源力扣题目描述:创建一个基于时间的键值存储类 TimeMap,它支持下面两个操作:set(string key, string value, int timestamp)存储键 key、值 value,以及给定的时间戳 timestamp。get(string key, int timestamp)返回先前调用 set(key, value, timestamp_prev) ...原创 2020-03-24 16:22:09 · 192 阅读 · 0 评论 -
leetcode:在线选举问题
题目来源:力扣题目描述:在选举中,第 i 张票是在时间为 times[i] 时投给 persons[i] 的。现在,我们想要实现下面的查询函数: TopVotedCandidate.q(int t) 将返回在 t 时刻主导选举的候选人的编号。在 t 时刻投出的选票也将被计入我们的查询之中。在平局的情况下,最近获得投票的候选人将会获胜。最多5000候选人.审题:此题可分解为两个子问...原创 2020-03-24 14:56:23 · 528 阅读 · 0 评论 -
leetcode:非重叠矩形中的随机点选取
题目来源:力扣题目描述:给定一个非重叠轴对齐矩形的列表 rects,写一个函数 pick 随机均匀地选取矩形覆盖的空间中的整数点。提示:整数点是具有整数坐标的点。矩形周边上的点包含在矩形覆盖的空间中。第 i 个矩形 rects [i] = [x1,y1,x2,y2],其中 [x1,y1] 是左下角的整数坐标,[x2,y2] 是右上角的整数坐标。每个矩形的长度和宽度不超过 2000。...原创 2020-03-24 12:29:05 · 667 阅读 · 0 评论 -
leetcode:根据权重随机选择
此题来自力扣,题目主要标签为二分搜索.题目描述:给定一个正整数数组 w ,其中 w[i] 代表位置 i 的权重,请写一个函数 pickIndex ,它可以随机地获取位置 i,选取位置 i 的概率与 w[i] 成正比。解题思路:思路1:初看到这道题时,我的最基本思路就是根据权重数组w[]构建扩展数组extenedArray[],如果位置i的权重为k,则在扩展数组包含k个i.基于此,我们...原创 2020-03-23 21:57:25 · 536 阅读 · 0 评论