
二分查找
文章平均质量分 78
CP Coding
这个作者很懒,什么都没留下…
展开
-
LeetCode 497. Random Point in Non-overlapping Rectangles - 二分查找(Binary Search)系列题25
题目大意:给定一组矩阵,所有矩阵与坐标轴平行并且没有重叠。每个矩阵用4个值表示rects[i] = [ai, bi, xi, yi],其中(ai, bi)表示矩阵左下顶点,(xi, yi)表示右上顶点。每个矩阵(包括4条边)都包含一定数量的整数点(横纵坐标都是整数)。现在要你随机地以相等的概率返回任意一个矩阵里的任意一个点。原创 2021-12-28 03:38:58 · 126 阅读 · 0 评论 -
LeetCode 436. Find Right Interval - 二分查找(Binary Search)系列题24
题目大意: 给定一个区间数组intervals[i] = [starti, endi],并且规定数组里的各区间起点starti是唯一的。对右区间right interval的定义是:对于一个区间intervals[i],它的右区间intervals[j]是数组里所有满足startj>=endi的区间里startj最小的那个区间。现在要求返回每个区间的右区间对应的数组索引,如果不存在则返回-1。原创 2021-12-28 00:23:53 · 4326 阅读 · 0 评论 -
LeetCode 1283. Find the Smallest Divisor Given a Threshold - 二分查找(Binary Search)系列题23
题目大意:给定一个整数数组nums和一个阈值threshold。任意选择一个正整数作为除数,把数组里每个数都除以它,然后把除的结果都加起来,现在问要使得总和不超过阈值threshold的最小的除数是多大。另外题目要求除法是向上取整。原创 2021-12-27 02:32:30 · 254 阅读 · 0 评论 -
LeetCode 410. Split Array Largest Sum - 二分查找(Binary Search)系列题22
这题应该所有这类题目的基础,搞定这题,Leetcode后面类似的题比如猴子吃香蕉,袋子分球和传送带等都能轻松搞定。这题跟LeetCode 1011. Capacity To Ship Packages Within D Days的解法完全一样。题目大意是要把一个数组nums分成m个连续的子数组,可以任意分但是要保证所有子数组的和尽可能地小,即具有最大和的那个子数组的和尽可能小。原创 2021-12-27 01:42:54 · 593 阅读 · 0 评论 -
LeetCode 1898. Maximum Number of Removable Characters- 二分查找(Binary Search)系列题21
这题跟前面刷过的一系列题比如LeetCode 875. Koko Eating Bananas类似,也是先确定查找的边界,然后用二分查找法快速查找一个最合适的值。原创 2021-12-26 09:39:05 · 257 阅读 · 0 评论 -
LeetCode 875. Koko Eating Bananas - 二分查找(Binary Search)系列题20
这题跟LeetCode 1760. Minimum Limit of Balls in a Bag是一样的题型,只是变成了猴子吃香蕉。熟练掌握二分查找法就可以搞定Leetcode上所有这一类型的题。原创 2021-12-25 22:59:46 · 2106 阅读 · 0 评论 -
LeetCode 1760. Minimum Limit of Balls in a Bag - 二分查找(Binary Search)系列题19
题目大意:给定一个数组nums, 数组的长度n表示有n个袋子,第i个元素表示第i个袋子里装有nums[i]个球。现在允许你对袋子的球动手脚,动手脚的次数不能超过给定的上限maxOperations。所谓动手脚就是说每次你可以任意挑一个袋子,然后把袋子的球分装到两个袋子里(可以任意分装但要求每个袋子必须都有至少一个球)。到最后剩球最多的那个袋子的球的个数是对你的惩罚数,现在你的任务是尽可能地使惩罚数最小,返回这个最小惩罚数。原创 2021-12-25 02:44:17 · 2187 阅读 · 0 评论 -
LeetCode 1011. Capacity To Ship Packages Within D Days - 二分查找(Binary Search)系列题18
题目大意:用传送带运送包裹,要求在days天内把全部包裹运送完。数组weights给出了每个包裹的重量,数组weights的长度就是包裹总个数而且要求必须按weights的顺序来运送包裹。传送带有运力上限,每次运送可以尽可能多运包裹但是总重量不能超过运力上限。现在问要保证在days天运送完全部包裹的传送带的最小运力上限是多少。原创 2021-12-24 07:40:27 · 238 阅读 · 0 评论 -
LeetCode 702. Search in a Sorted Array of Unknown Size - 二分查找(Binary Search)系列题17
可以确定是用二分查找法,但题目给的是一个未知长度的数组,看起来很吓人,无法确定左右边界。但仔细一读题目会发现其实就是一道最普通的二分查找题。题目给了一个API函数,可以输入一个数组索引,如果索引值是在数组长度范围内就返回对应的数值;如果超出范围则返回一个大数2^32 - 1来表示索引超出数组边界。另外题目的两个限制条件大大降低了题目难度。原创 2021-12-24 01:14:51 · 494 阅读 · 0 评论 -
LeetCode 275. H-Index II - 二分查找(Binary Search)系列题16
题目里又是有序数组又是O(logn)时间复杂度的,相当于直接告诉我们要用二分查找法。仔细分析题目可以把题目简化为:给定一个长度为n的有序数组citations,从[1,n]范围内找一个最大数h,使得数组里至少有h个数的数值大于等于h。这样用二分查找法已经很明显且很容易了。原创 2021-12-23 01:20:21 · 872 阅读 · 0 评论 -
LeetCode 278. First Bad Version - 二分查找(Binary Search)系列题15
题目很长,其实是一道最基本的二分查找法题。把版本号[left, right]从中间分成前后两个区间,判断中间版本号mid = (left + right) // 2, 如果中间版本号是Bad,右半区间肯定都是Bad可以排除则继续查找左半区间,否则继续查找右半区间。查找到最后,左边界left就是第一个Bad Version。原创 2021-12-22 22:27:38 · 260 阅读 · 0 评论 -
LeetCode 270. Closest Binary Search Tree Value - 二分查找(Binary Search)系列题14
在二叉搜索树里查找一个数,如果不用二分查找法那就对不起二叉搜索树的名字。我们知道二叉搜索树的左子树的所有节点值都比根节点值小,右子树所有节点值都比根节点值大,因此很容易从根节点把树划分成两棵子树,通过判断可以排除掉一棵子树即减少一半的查找空间。原创 2021-12-22 03:50:21 · 327 阅读 · 0 评论 -
LeetCode 222. Count Complete Tree Nodes - 二分查找(Binary Search)系列题13
题目要求一棵完全二叉树的节点个数。所谓完全二叉树就是树中除了最后一层其他每层的节点都是满的,而最后一层的节点是集中在左部即从左到右挨个分布的。根据完全二叉树的特点,我们可以直接算出各层(除了最后一层)的节点个数。原创 2021-12-22 00:11:51 · 859 阅读 · 0 评论 -
LeetCode 209. Minimum Size Subarray Sum - 二分查找(Binary Search)系列题12
题目大意是从一个数组中找到一个最小长度的子数组,使得子数组的和大于等于目标数。一个数组最短长度子数组就是只含一个元素,最长子数组就是数组本身。因此本题的暴力解法就是从长度为1到长度为n的所有子数组从短到长挨个求和,遇到的第一个和大于等于目标数的子数组就是满足条件的最短子数组。原创 2021-12-21 04:12:10 · 258 阅读 · 0 评论 -
LeetCode 4. Median of Two Sorted Arrays - 二分查找(Binary Search)系列题11
题目关键字有序数组以及时间复杂度O(log(m+n)),提醒我们应该用二分查找法。这题的难点是该如何用二分查找法。题目要求的是从两个有序数组中找出它们的中位数。所谓中位数就是一个有序数组中最中间的那个(总数为奇数)或那两个数(总数为偶数)。这题最简单的方法是把两个有序数组合并成一个有序数组然后就立即知道中位数了,但时间复杂度满足不了题目要求。因此还是得用二分查找法。原创 2021-12-20 05:13:31 · 321 阅读 · 0 评论 -
LeetCode 154. Find Minimum in Rotated Sorted Array II - 二分查找(Binary Search)系列题10
这题是LeetCode 153. Find Minimum in Rotated Sorted Array的拓展,解题思路跟LeetCode 81. Search in Rotated Sorted Array II一样,都是因为数组可能有重复数字使得前一题用到的判断条件不成立。原创 2021-12-19 09:08:09 · 162 阅读 · 0 评论 -
LeetCode 153. Find Minimum in Rotated Sorted Array - 二分查找(Binary Search)系列题9
这题跟LeetCode 33. Search in Rotated Sorted Array类似,解题思路也基本一样用二分查找法,把数组分成左右两个区间后判断最小值是落在左半区间还是右半区间,关键点是判断的条件该何确定呢?原创 2021-12-19 08:52:34 · 172 阅读 · 0 评论 -
LeetCode 528. Random Pick with Weight - 二分查找(Binary Search)系列题8
这题能否用二分查找法,一开始并不明朗,所以先来分析一下题目大意。题目给了一个长度为n的数组w代表有n个点(0~n-1),数组里的数值表示每个点的权重值(w[i]就是第i个点的权重值),要求实现一个函数随机返回一个点,返回的概率是该点的权重值占总权重值的比例。原创 2021-12-19 04:46:38 · 152 阅读 · 0 评论 -
LeetCode 81. Search in Rotated Sorted Array II - 二分查找(Binary Search)系列题7
这题是LeetCode 33. Search in Rotated Sorted Array的拓展,显然还是用二分查找法。当然出这题的目的就是告诉我们上一题的代码不能直接适用到这题,也就是说上一题判断目标数落点区间的条件遭到破坏不再成立。原创 2021-12-18 23:10:30 · 532 阅读 · 0 评论 -
LeetCode 74. Search a 2D Matrix - 二分查找(Binary Search)系列题6
看完题目大概猜到要用到二分查找法,但是题目要求从一个矩阵查找目标数,那关键点就变成如何查找中间点来把矩阵分成两区间。仔细分析题目就会发现这题跟LeetCode 704. Binary Search一样就是一道最基础的二分查找法的题。原创 2021-12-18 01:26:36 · 671 阅读 · 0 评论 -
LeetCode 162. Find Peak Element - 二分查找(Binary Search)系列题5
题目大意是给定一个数组,从中找出一个峰值(该值比左边和右边的数都要大),要求算法时间复杂度为O(logn)。显然是要我们用二分查找法(Binary Search)。首先还是要把握住二分查找法的核心思想,把数组从中间分成两个区间后用什么条件可以判断目标数落在哪个区间。原创 2021-12-17 23:50:15 · 322 阅读 · 0 评论 -
LeetCode 34. Find First and Last Position of Element in Sorted Array - 二分查找(Binary Search)系列题4
所有人看到这题都会想到肯定是二分查找法,但是这题难度在于中间值与目标值比较之后左边界或右边界该怎么移动。其实如果我们对lower bound和upper bound的概念很熟悉的话,那这题就变得很简单了。原创 2021-12-17 07:01:17 · 1087 阅读 · 0 评论 -
LeetCode 287. Find the Duplicate Number - 二分查找(Binary Search)系列题3
这题的解法有很多种,本文只探讨该如何用二分查找来解答。题目要求从一个长度为n+1的数组中找出重复出现的数字(有且只有一个数字有重复),也没说数组是否有序,看起来不容易想到可以用二分查找法。但是这题给的条件是,数组中的数字只可能在[1,n]范围内且只有一个数字重复,那其实可以把题目变换成从[1,n]区间寻找一个给定数组中出现两次或两次以上的数。因此只要能够判断重复数字是落在前半区间还是后半区间,那就是用二分查找法了。原创 2021-12-17 00:37:20 · 503 阅读 · 0 评论 -
LeetCode 33. Search in Rotated Sorted Array - 二分查找(Binary Search)系列题2
这题是经典二分查找算法也就是LeetCode 704. Binary Search的变形,它把一个排好序的数组做了旋转从而破坏了数组的单调递增性,从而使得判断目标数是落在哪个区间的难度加大。由于题目中是把一个排好序的数组做了旋转,也就是说旋转后的数组只有一个地方的递增性被破坏,要么是前半区间要么就是后半区间。而对于仍然是单调递增的那一半区间,我们很容易判断目标数是否在该区间,如不在那就肯定在另一半区间。原创 2021-12-16 09:38:48 · 686 阅读 · 0 评论 -
LeetCode 704. Binary Search - 二分查找(Binary Search)系列题1
二分查找也称折半查找(Binary Search),它是一种效率较高的查找方法。但是,折半查找要求线性表必须采用顺序存储结构,而且表中元素按关键字有序排列。【百度百科】如果碰到题目是关于有序数组查找或者要求时间复杂度(Time Complexity)为O(logn),我们就要第一时间想到二分查找法(Binary Search)。原创 2021-12-16 04:20:30 · 248 阅读 · 0 评论