![](https://img-blog.csdnimg.cn/20201014180756927.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
二分查找
文章平均质量分 56
Guapifang
这个作者很懒,什么都没留下…
展开
-
LeetCode 1493. 删掉一个元素以后全为 1 的最长子数组 - 二分 + 滑动窗口
请你在删掉元素的结果数组中,返回最长的且只包含 1 的非空子数组的长度。如果不存在这样的子数组,请返回 0。提示 1:输入:nums = [1,1,0,1]输出:3解释:删掉位置 2 的数后,[1,1,1] 包含 3 个 1。示例 2:输入:nums = [0,1,1,1,0,1,1,0,1]输出:5解释:删掉位置 4 的数字后,[0,1,1,1,1,1,0,1] 的最长全 1 子数组为 [1,1,1,1,1]。示例 3:输入:nums = [1,1,1]输出:2。原创 2023-07-18 21:23:57 · 1021 阅读 · 1 评论 -
LeetCode 33. 搜索旋转排序数组 -- 二分判断区间
在传递给函数之前,nums 在预先未知的某个下标 k(0原创 2022-12-11 17:34:33 · 72 阅读 · 0 评论 -
LeetCode LCP 57. 打地鼠 -- 动态规划+二分查询过滤无效数据
LCP 57. 打地鼠困难11相关企业欢迎各位勇者来到力扣城,本次试炼主题为「打地鼠」。勇者面前有一个大小为3*3 的打地鼠游戏机,地鼠将随机出现在各个位置,moles[i] = [t,x,y] 表示在第 t 秒会有地鼠出现在 (x,y) 位置上,并于第 t+1 秒该地鼠消失。勇者有一把可敲打地鼠的锤子,初始时刻(即第 0 秒)锤子位于正中间的格子 (1,1),锤子的使用规则如下:锤子每经过 1 秒可以往上、下、左、右中的一个方向移动一格,也可以不移动。原创 2022-11-08 19:29:17 · 326 阅读 · 0 评论 -
LeetCode 729. 我的日程安排表 I -- set
我的日程安排表 I实现一个 MyCalendar 类来存放你的日程安排。如果要添加的日程安排不会造成 重复预订 ,则可以存储这个新的日程安排。当两个日程安排有一些时间上的交叉时(例如两个日程安排都在同一时间内),就会产生 重复预订 。日程可以用一对整数 start 和 end 表示,这里的时间是半开区间,即 [start, end), 实数 x 的范围为, start <= x < end 。实现 MyCalendar 类:MyCalendar() 初始化日历对象。boolea.原创 2021-12-02 11:02:06 · 115 阅读 · 0 评论 -
LeetCode 240. 搜索二维矩阵 II -- 二分
搜索二维矩阵 II编写一个高效的算法来搜索 m x n 矩阵 matrix 中的一个目标值 target 。该矩阵具有以下特性:每行的元素从左到右升序排列。每列的元素从上到下升序排列。示例 1:输入:matrix = [[1,4,7,11,15],[2,5,8,12,19],[3,6,9,16,22],[10,13,14,17,24],[18,21,23,26,30]], target = 5输出:true示例 2:输入:matrix = [[1,4,7,11,15],[2,5,8.原创 2021-10-25 09:59:24 · 79 阅读 · 0 评论 -
LeetCode 1751. 最多可以参加的会议数目 II--二分+动态规划+贪心
最多可以参加的会议数目 II给你一个 events 数组,其中 events[i] = [startDayi, endDayi, valuei] ,表示第 i 个会议在 startDayi 天开始,第 endDayi 天结束,如果你参加这个会议,你能得到价值 valuei 。同时给你一个整数 k 表示你能参加的最多会议数目。你同一时间只能参加一个会议。如果你选择参加某个会议,那么你必须 完整 地参加完这个会议。会议结束日期是包含在会议内的,也就是说你不能同时参加一个开始日期与另一个结束日期相同的两个.原创 2021-10-18 13:18:06 · 148 阅读 · 0 评论 -
LeetCode 1723. 完成所有工作的最短时间--二分+递归搜索
完成所有工作的最短时间给你一个整数数组 jobs ,其中 jobs[i] 是完成第 i 项工作要花费的时间。请你将这些工作分配给 k 位工人。所有工作都应该分配给工人,且每项工作只能分配给一位工人。工人的 工作时间 是完成分配给他们的所有工作花费时间的总和。请你设计一套最佳的工作分配方案,使工人的 最大工作时间 得以 最小化 。返回分配方案中尽可能 最小 的 最大工作时间 。示例 1:输入:jobs = [3,2,3], k = 3输出:3解释:给每位工人分配一项工作,最大工作时间是 3 .原创 2021-10-14 11:04:28 · 225 阅读 · 0 评论 -
2008. 出租车的最大盈利--贪心+排序+二分
出租车的最大盈利你驾驶出租车行驶在一条有 n 个地点的路上。这 n 个地点从近到远编号为 1 到 n ,你想要从 1 开到 n ,通过接乘客订单盈利。你只能沿着编号递增的方向前进,不能改变方向。乘客信息用一个下标从 0 开始的二维数组 rides 表示,其中 rides[i] = [starti, endi, tipi] 表示第 i 位乘客需要从地点 starti 前往 endi ,愿意支付 tipi 元的小费。每一位 你选择接单的乘客 i ,你可以 盈利 endi - starti + tipi.原创 2021-10-13 14:06:24 · 319 阅读 · 0 评论 -
LeetCode 面试题 16.06. 最小差--二分查找
面试题 16.06. 最小差给定两个整数数组a和b,计算具有最小差绝对值的一对数值(每个数组中取一个值),并返回该对数值的差示例:输入:{1, 3, 15, 11, 2}, {23, 127, 235, 19, 8}输出:3,即数值对(11, 8)提示:1 <= a.length, b.length <= 100000-2147483648 <= a[i], b[i] <= 2147483647正确结果在区间 [0, 2147483647] 内题解二分查找保证能原创 2021-10-12 13:46:32 · 97 阅读 · 0 评论 -
LeetCode 1855. 下标对中的最大距离--二分
下标对中的最大距离给你两个 非递增 的整数数组 nums1 和 nums2 ,数组下标均 从 0 开始 计数。下标对 (i, j) 中 0 <= i < nums1.length 且 0 <= j < nums2.length 。如果该下标对同时满足 i <= j 且 nums1[i] <= nums2[j] ,则称之为 有效 下标对,该下标对的 距离 为 j - i 。返回所有 有效 下标对 (i, j) 中的 最大距离 。如果.原创 2021-09-29 16:11:09 · 222 阅读 · 0 评论 -
LeetCode 1011. 在 D 天内送达包裹的能力--二分
在 D 天内送达包裹的能力传送带上的包裹必须在 D 天内从一个港口运送到另一个港口。传送带上的第 i 个包裹的重量为 weights[i]。每一天,我们都会按给出重量的顺序往传送带上装载包裹。我们装载的重量不会超过船的最大运载重量。返回能在 D 天内将传送带上的所有包裹送达的船的最低运载能力。示例 1:输入:weights = [1,2,3,4,5,6,7,8,9,10], D = 5输出:15解释:船舶最低载重 15 就能够在 5 天内送达所有包裹,如下所示:第 1 天:1, 2, .原创 2021-09-23 21:42:37 · 79 阅读 · 0 评论 -
LeetCode 975. 奇偶跳--set+map+动态规划
奇偶跳给定一个整数数组 A,你可以从某一起始索引出发,跳跃一定次数。在你跳跃的过程中,第 1、3、5… 次跳跃称为奇数跳跃,而第 2、4、6… 次跳跃称为偶数跳跃。你可以按以下方式从索引 i 向后跳转到索引 j(其中 i < j):在进行奇数跳跃时(如,第 1,3,5... 次跳跃),你将会跳到索引 j,使得 A[i] <= A[j],A[j] 是可能的最小值。如果存在多个这样的索引 j,你只能跳到满足要求的最小索引 j 上。在进行偶数跳跃时(如,第 2,4,6... 次跳跃),你将.原创 2021-09-17 11:23:12 · 95 阅读 · 0 评论 -
LeetCode 875. 爱吃香蕉的珂珂--二分查找
爱吃香蕉的珂珂珂珂喜欢吃香蕉。这里有 N 堆香蕉,第 i 堆中有 piles[i] 根香蕉。警卫已经离开了,将在 H 小时后回来。珂珂可以决定她吃香蕉的速度 K (单位:根/小时)。每个小时,她将会选择一堆香蕉,从中吃掉 K 根。如果这堆香蕉少于 K 根,她将吃掉这堆的所有香蕉,然后这一小时内不会再吃更多的香蕉。珂珂喜欢慢慢吃,但仍然想在警卫回来前吃掉所有的香蕉。返回她可以在 H 小时内吃掉所有香蕉的最小速度 K(K 为整数)。示例 1:输入: piles = [3,6,7,11], H =.原创 2021-08-30 16:38:27 · 217 阅读 · 0 评论 -
LeetCode 825. 适龄的朋友--多层二分
适龄的朋友人们会互相发送好友请求,现在给定一个包含有他们年龄的数组,ages[i] 表示第 i 个人的年龄。当满足以下任一条件时,A 不能给 B(A、B不为同一人)发送好友请求:age[B] <= 0.5 * age[A] + 7age[B] > age[A]age[B] > 100 && age[A] < 100否则,A 可以给 B 发送好友请求。注意如果 A 向 B 发出了请求,不等于 B 也一定会向 A 发出请求。而且,人们不会给自己发送好友.原创 2021-08-29 22:52:52 · 151 阅读 · 0 评论 -
LeetCode 826. 安排工作以达到最大收益---排序+二分
安排工作以达到最大收益有一些工作:difficulty[i] 表示第 i 个工作的难度,profit[i] 表示第 i 个工作的收益。现在我们有一些工人。worker[i] 是第 i 个工人的能力,即该工人只能完成难度小于等于 worker[i] 的工作。每一个工人都最多只能安排一个工作,但是一个工作可以完成多次。举个例子,如果 3 个工人都尝试完成一份报酬为 1 的同样工作,那么总收益为 $3。如果一个工人不能完成任何工作,他的收益为 $0 。我们能得到的最大收益是多少?示例:输入: d.原创 2021-08-28 21:12:16 · 150 阅读 · 0 评论 -
LeetCode 436. 寻找右区间--二分+排序
寻找右区间给你一个区间数组 intervals ,其中 intervals[i] = [starti, endi] ,且每个 starti 都 不同 。区间 i 的 右侧区间 可以记作区间 j ,并满足 startj >= endi ,且 startj 最小化 。返回一个由每个区间 i 的 右侧区间 的最小起始位置组成的数组。如果某个区间 i 不存在对应的 右侧区间 ,则下标 i 处的值设为 -1 。示例 1:输入:intervals = [[1,2]]输出:[-1]解释:集合中只有.原创 2021-08-18 22:09:26 · 113 阅读 · 0 评论 -
LeetCode 363. 矩形区域不超过 K 的最大数值和--前缀和+set查询
矩形区域不超过 K 的最大数值和给你一个 m x n 的矩阵 matrix 和一个整数 k ,找出并返回矩阵内部矩形区域的不超过 k 的最大数值和。题目数据保证总会存在一个数值和不超过 k 的矩形区域。示例 1:输入:matrix = [[1,0,1],[0,-2,3]], k = 2输出:2解释:蓝色边框圈出来的矩形区域 [[0, 1], [-2, 3]] 的数值和是 2,且 2 是不超过 k 的最大数字(k = 2)。示例 2:输入:matrix = [[2,2,-1]], k =.原创 2021-08-17 17:05:18 · 82 阅读 · 0 评论 -
LeetCode 剑指 Offer II 008. 和大于等于 target 的最短子数组--二分+前缀和
剑指 Offer II 008. 和大于等于 target 的最短子数组给定一个含有 n 个正整数的数组和一个正整数 target 。找出该数组中满足其和 ≥ target 的长度最小的 连续子数组 [numsl, numsl+1, …, numsr-1, numsr] ,并返回其长度。如果不存在符合条件的子数组,返回 0 。示例 1:输入:target = 7, nums = [2,3,1,2,4,3]输出:2解释:子数组 [4,3] 是该条件下的长度最小的子数组。示例 2:输入:targ原创 2021-08-16 11:10:48 · 123 阅读 · 0 评论 -
LeetCode 1712. 将数组分成三个子数组的方案数--二分+前缀和
将数组分成三个子数组的方案数我们称一个分割整数数组的方案是 好的 ,当它满足:数组被分成三个 非空 连续子数组,从左至右分别命名为 left , mid , right 。left 中元素和小于等于 mid 中元素和,mid 中元素和小于等于 right 中元素和。给你一个 非负 整数数组 nums ,请你返回 好的 分割 nums 方案数目。由于答案可能会很大,请你将结果对 109 + 7 取余后返回。示例 1:输入:nums = [1,1,1]输出:1解释:唯一一种好的分割方案是将.原创 2021-08-11 22:34:22 · 302 阅读 · 0 评论 -
LeetCode 611. 有效三角形的个数--二分查找
有效三角形的个数给定一个包含非负整数的数组,你的任务是统计其中可以组成三角形三条边的三元组个数。示例 1:输入: [2,2,3,4]输出: 3解释:有效的组合是:2,3,4 (使用第一个 2)2,3,4 (使用第二个 2)2,2,3注意:数组长度不超过1000。数组里整数的范围为 [0, 1000]。题解先排序,然后循环双重遍历nums[i]和nums[j],根据三角形两边之和大于第三边,两边之差小于第三边,然后去找个数。AC代码class Solution {pub.原创 2021-08-04 20:09:56 · 137 阅读 · 0 评论 -
LeetCode 1208. 尽可能使字符串相等---前缀和+二分
尽可能使字符串相等给你两个长度相同的字符串,s 和 t。将 s 中的第 i 个字符变到 t 中的第 i 个字符需要 |s[i] - t[i]| 的开销(开销可能为 0),也就是两个字符的 ASCII 码值的差的绝对值。用于变更字符串的最大预算是 maxCost。在转化字符串时,总开销应当小于等于该预算,这也意味着字符串的转化可能是不完全的。如果你可以将 s 的子字符串转化为它在 t 中对应的子字符串,则返回可以转化的最大长度。如果 s 中没有子字符串可以转化成 t 中对应的子字符串,则返回 0.原创 2021-08-02 22:26:19 · 199 阅读 · 0 评论 -
LeetCode 1713. 得到子序列的最少操作次数 ---离散化+二分法最长上升子序列
得到子序列的最少操作次数给你一个数组 target ,包含若干 互不相同 的整数,以及另一个整数数组 arr ,arr 可能 包含重复元素。每一次操作中,你可以在 arr 的任意位置插入任一整数。比方说,如果 arr = [1,4,1,2] ,那么你可以在中间添加 3 得到 [1,4,3,1,2] 。你可以在数组最开始或最后面添加整数。请你返回 最少 操作次数,使得 target 成为 arr 的一个子序列。一个数组的 子序列 指的是删除原数组的某些元素(可能一个元素都不删除),同时不改变其余元.原创 2021-07-26 10:23:42 · 139 阅读 · 0 评论 -
LeetCode 403. 青蛙过河--动态规划+set+二分查找
青蛙过河一只青蛙想要过河。 假定河流被等分为若干个单元格,并且在每一个单元格内都有可能放有一块石子(也有可能没有)。 青蛙可以跳上石子,但是不可以跳入水中。给你石子的位置列表 stones(用单元格序号 升序 表示), 请判定青蛙能否成功过河(即能否在最后一步跳至最后一块石子上)。开始时, 青蛙默认已站在第一块石子上,并可以假定它第一步只能跳跃一个单位(即只能从单元格 1 跳至单元格 2 )。如果青蛙上一步跳跃了 k 个单位,那么它接下来的跳跃距离只能选择为 k - 1、k 或 k + 1 个单.原创 2021-07-24 10:20:50 · 311 阅读 · 0 评论 -
LeetCode 373. 查找和最小的K对数字--二分+排序
查找和最小的K对数字给定两个以升序排列的整数数组 nums1 和 nums2 , 以及一个整数 k 。定义一对值 (u,v),其中第一个元素来自 nums1,第二个元素来自 nums2 。请找到和最小的 k 个数对 (u1,v1), (u2,v2) … (uk,vk) 。示例 1:输入: nums1 = [1,7,11], nums2 = [2,4,6], k = 3输出: [1,2],[1,4],[1,6]解释: 返回序列中的前 3 对数:[1,2],[1,4],[1,6],[7.原创 2021-07-24 09:23:17 · 140 阅读 · 0 评论 -
LeetCode 395. 至少有 K 个重复字符的最长子串--二分查找+前缀和+优先队列
至少有 K 个重复字符的最长子串给你一个字符串 s 和一个整数 k ,请你找出 s 中的最长子串, 要求该子串中的每一字符出现次数都不少于 k 。返回这一子串的长度。示例 1:输入:s = “aaabb”, k = 3输出:3解释:最长子串为 “aaa” ,其中 ‘a’ 重复了 3 次。示例 2:输入:s = “ababbc”, k = 2输出:5解释:最长子串为 “ababb” ,其中 ‘a’ 重复了 2 次, ‘b’ 重复了 3 次。提示:1 <= s.length &l.原创 2021-07-23 18:27:07 · 82 阅读 · 0 评论 -
LeetCode 174. 地下城游戏--动态规划+二分
地下城游戏一些恶魔抓住了公主(P)并将她关在了地下城的右下角。地下城是由 M x N 个房间组成的二维网格。我们英勇的骑士(K)最初被安置在左上角的房间里,他必须穿过地下城并通过对抗恶魔来拯救公主。骑士的初始健康点数为一个正整数。如果他的健康点数在某一时刻降至 0 或以下,他会立即死亡。有些房间由恶魔守卫,因此骑士在进入这些房间时会失去健康点数(若房间里的值为负整数,则表示骑士将损失健康点数);其他房间要么是空的(房间里的值为 0),要么包含增加骑士健康点数的魔法球(若房间里的值为正整数,则表示骑.原创 2021-07-22 16:04:42 · 113 阅读 · 0 评论 -
LeetCode 1818. 绝对差值和--set查找近似值
绝对差值和给你两个正整数数组 nums1 和 nums2 ,数组的长度都是 n 。数组 nums1 和 nums2 的 绝对差值和 定义为所有 |nums1[i] - nums2[i]|(0 <= i < n)的 总和(下标从 0 开始)。你可以选用 nums1 中的 任意一个 元素来替换 nums1 中的 至多 一个元素,以 最小化 绝对差值和。在替换数组 nums1 中最多一个元素 之后 ,返回最小绝对差值和。因为答案可能很大,所以需要对 109 + 7 取余 后返回。|x| .原创 2021-07-14 18:16:28 · 95 阅读 · 0 评论 -
LeetCode 658. 找到 K 个最接近的元素--二分
找到 K 个最接近的元素给定一个排序好的数组 arr ,两个整数 k 和 x ,从数组中找到最靠近 x(两数之差最小)的 k 个数。返回的结果必须要是按升序排好的。整数 a 比整数 b 更接近 x 需要满足:|a - x| < |b - x| 或者|a - x| == |b - x| 且 a < b示例 1:输入:arr = [1,2,3,4,5], k = 4, x = 3输出:[1,2,3,4]示例 2:输入:arr = [1,2,3,4,5], k = 4, x =.原创 2021-07-11 22:35:18 · 90 阅读 · 0 评论 -
LeetCode 209. 长度最小的子数组--前缀和+二分
长度最小的子数组给定一个含有 n 个正整数的数组和一个正整数 target 。找出该数组中满足其和 ≥ target 的长度最小的 连续子数组 [numsl, numsl+1, …, numsr-1, numsr] ,并返回其长度。如果不存在符合条件的子数组,返回 0 。示例 1:输入:target = 7, nums = [2,3,1,2,4,3]输出:2解释:子数组 [4,3] 是该条件下的长度最小的子数组。示例 2:输入:target = 4, nums = [1,4,4]输出:.原创 2021-07-08 13:56:03 · 180 阅读 · 0 评论 -
LeetCode 930. 和相同的二元子数组--二分查找+前缀和
和相同的二元子数组给你一个二元数组 nums ,和一个整数 goal ,请你统计并返回有多少个和为 goal 的 非空 子数组。子数组 是数组的一段连续部分。示例 1:输入:nums = [1,0,1,0,1], goal = 2输出:4解释:如下面黑体所示,有 4 个满足题目要求的子数组:[1,0,1,0,1][1,0,1,0,1][1,0,1,0,1][1,0,1,0,1]示例 2:输入:nums = [0,0,0,0,0], goal = 0输出:15提示:1 &l.原创 2021-07-08 11:48:17 · 144 阅读 · 2 评论 -
LeetCode1170. 比较字符串最小字母出现频次--二分
比较字符串最小字母出现频次定义一个函数 f(s),统计 s 中(按字典序比较)最小字母的出现频次 ,其中 s 是一个非空字符串。例如,若 s = “dcce”,那么 f(s) = 2,因为字典序最小字母是 “c”,它出现了 2 次。现在,给你两个字符串数组待查表 queries 和词汇表 words 。对于每次查询 queries[i] ,需统计 words 中满足 f(queries[i]) < f(W) 的 词的数目 ,W 表示词汇表 words 中的每个词。请你返回一个整数数组 a.原创 2021-05-25 16:04:40 · 114 阅读 · 0 评论 -
LeetCode 300. 最长递增子序列--动态规划+二分优化
最长递增子序列给你一个整数数组 nums ,找到其中最长严格递增子序列的长度。子序列是由数组派生而来的序列,删除(或不删除)数组中的元素而不改变其余元素的顺序。例如,[3,6,2,7] 是数组 [0,3,1,6,2,2,7] 的子序列。示例 1:输入:nums = [10,9,2,5,3,7,101,18]输出:4解释:最长递增子序列是 [2,3,7,101],因此长度为 4 。示例 2:输入:nums = [0,1,0,3,2,3]输出:4示例 3:输入:nums = [7,7,.原创 2021-04-23 17:12:46 · 205 阅读 · 0 评论 -
LeetCode 1283. 使结果不超过阈值的最小除数--经典二分
使结果不超过阈值的最小除数给你一个整数数组 nums 和一个正整数 threshold ,你需要选择一个正整数作为除数,然后将数组里每个数都除以它,并对除法结果求和。请你找出能够使上述结果小于等于阈值 threshold 的除数中 最小 的那个。每个数除以除数后都向上取整,比方说 7/3 = 3 , 10/2 = 5 。题目保证一定有解。示例 1:输入:nums = [1,2,5,9], threshold = 6输出:5解释:如果除数为 1 ,我们可以得到和为 17 (1+2+5+9.原创 2021-04-01 16:12:31 · 91 阅读 · 0 评论 -
LeetCode 1574. 删除最短的子数组使剩余数组有序--二分长度
删除最短的子数组使剩余数组有序给你一个整数数组 arr ,请你删除一个子数组(可以为空),使得 arr 中剩下的元素是 非递减 的。一个子数组指的是原数组中连续的一个子序列。请你返回满足题目要求的最短子数组的长度。示例 1:输入:arr = [1,2,3,10,4,2,3,5]输出:3解释:我们需要删除的最短子数组是 [10,4,2] ,长度为 3 。剩余元素形成非递减数组 [1,2,3,3,5] 。另一个正确的解为删除子数组 [3,10,4] 。示例 2:输入:arr = [5,4.原创 2021-04-01 16:01:09 · 181 阅读 · 0 评论 -
LeetCode 1044. 最长重复子串--二分查找+Rabin-Karp 字符串编码+Hash查找
最长重复子串给出一个字符串 S,考虑其所有重复子串(S 的连续子串,出现两次或多次,可能会有重叠)。返回任何具有最长可能长度的重复子串。(如果 S 不含重复子串,那么答案为 “”。)示例 1:输入:“banana”输出:“ana”示例 2:输入:“abcd”输出:""提示:2 <= S.length <= 10^5S 由小写英文字母组成。题解很有趣的题目,首先二分查找可以知道,就是二分长度,如果长度为mid的字符串出现了至少两次,那么就可能为答案并继续二分。确定是二.原创 2021-03-10 19:46:07 · 335 阅读 · 0 评论 -
LeetCode 1124. 表现良好的最长时间段--前缀和+二分查找
表现良好的最长时间段给你一份工作时间表 hours,上面记录着某一位员工每天的工作小时数。我们认为当员工一天中的工作小时数大于 8 小时的时候,那么这一天就是「劳累的一天」。所谓「表现良好的时间段」,意味在这段时间内,「劳累的天数」是严格 大于「不劳累的天数」。请你返回「表现良好时间段」的最大长度。示例 1:输入:hours = [9,9,6,0,6,6,9]输出:3解释:最长的表现良好时间段是 [9,9,6]。提示:1 <= hours.length <= 10000.原创 2021-02-17 21:43:35 · 299 阅读 · 0 评论 -
LeetCode 632. 最小区间--从二分到二分再二分
最小区间你有 k 个 非递减排列 的整数列表。找到一个 最小 区间,使得 k 个列表中的每个列表至少有一个数包含在其中。我们定义如果 b-a < d-c 或者在 b-a == d-c 时 a < c,则区间 [a,b] 比 [c,d] 小。示例 1:输入:nums = [[4,10,15,24,26], [0,9,12,20], [5,18,22,30]]输出:[20,24]解释:列表 1:[4, 10, 15, 24, 26],24 在区间 [20,24] 中。列表 2:[.原创 2021-01-13 20:49:57 · 134 阅读 · 0 评论 -
LeetCode 483. 最小好进制--数学分析+二分
最小好进制对于给定的整数 n, 如果n的k(k>=2)进制数的所有数位全为1,则称 k(k>=2)是 n 的一个好进制。以字符串的形式给出 n, 以字符串的形式返回 n 的最小好进制。示例 1:输入:“13”输出:“3”解释:13 的 3 进制是 111。示例 2:输入:“4681”输出:“8”解释:4681 的 8 进制是 11111。示例 3:输入:“1000000000000000000”输出:“999999999999999999”解释:100000000.原创 2020-12-06 13:58:33 · 331 阅读 · 0 评论 -
LeetCode 719. 找出第 k 小的距离对--二分找数目
找出第 k 小的距离对给定一个整数数组,返回所有数对之间的第 k 个最小距离。一对 (A, B) 的距离被定义为 A 和 B 之间的绝对差值。示例 1:输入:nums = [1,3,1]k = 1输出:0解释:所有数对如下:(1,3) -> 2(1,1) -> 0(3,1) -> 2因此第 1 个最小距离的数对是 (1,1),它们之间的距离为 0。提示:2 <= len(nums) <= 10000.0 <= nums[i] < 1.原创 2020-12-05 21:23:51 · 125 阅读 · 0 评论 -
LeetCode 1235. 规划兼职工作--二分查找后进行动态规划
规划兼职工作你打算利用空闲时间来做兼职工作赚些零花钱。这里有 n 份兼职工作,每份工作预计从 startTime[i] 开始到 endTime[i] 结束,报酬为 profit[i]。给你一份兼职工作表,包含开始时间 startTime,结束时间 endTime 和预计报酬 profit 三个数组,请你计算并返回可以获得的最大报酬。注意,时间上出现重叠的 2 份工作不能同时进行。如果你选择的工作在时间 X 结束,那么你可以立刻进行在时间 X 开始的下一份工作。示例 1:输入:startT.原创 2020-12-05 20:19:39 · 343 阅读 · 0 评论