Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Sign up
Appearance settings

Commit 55bd379

Browse files
author
robot
committed
go
1 parent da6de9d commit 55bd379

File tree

3 files changed

+14
-7
lines changed

3 files changed

+14
-7
lines changed

‎README.md

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -431,6 +431,7 @@ leetcode 题解,记录自己的 leetcode 解题之路。
431431
- [2592. 最大化数组的伟大值](./problems/2592.maximize-greatness-of-an-array.md)
432432
- [2593. 标记所有元素后数组的分数](./problems/2593.find-score-of-an-array-after-marking-all-elements.md)
433433
- [2817. 限制条件下元素之间的最小绝对差](./problems/2817.minimum-absolute-difference-between-elements-with-constraint.md)
434+
- [2866. 美丽塔 II](./problems/2866.beautiful-towers-ii.md)
434435
- [5935. 适合打劫银行的日子](./problems/5935.find-good-days-to-rob-the-bank.md)
435436
- [5936. 引爆最多的炸弹](./problems/5936.detonate-the-maximum-bombs.md)
436437
- [5965. 相同元素的间隔之和](./problems/5965.intervals-between-identical-elements.md)

‎SUMMARY.md

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -276,6 +276,7 @@
276276
- [2592. 最大化数组的伟大值](./problems/2592.maximize-greatness-of-an-array.md)
277277
- [2593. 标记所有元素后数组的分数](./problems/2593.find-score-of-an-array-after-marking-all-elements.md)
278278
- [2817. 限制条件下元素之间的最小绝对差](./problems/2817.minimum-absolute-difference-between-elements-with-constraint.md)
279+
- [2866. 美丽塔 II](./problems/2866.beautiful-towers-ii.md)
279280
- [5935. 适合打劫银行的日子](./problems/5935.find-good-days-to-rob-the-bank.md)
280281
- [5936. 引爆最多的炸弹](./problems/5936.detonate-the-maximum-bombs.md)
281282
- [5965. 相同元素的间隔之和](./problems/5965.intervals-between-identical-elements.md)

‎problems/2009.minimum-number-of-operations-to-make-array-continuous.md

Lines changed: 12 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -66,20 +66,24 @@ nums 中 最大 元素与 最小 元素的差等于 nums.length - 1 。
6666

6767
朴素的思路是枚举所有的区间 [a,b] 其中 a 和 b 为区间 [min(nums),max(nums)] 中的两个数。这种思路的时间复杂度是 $O(v^2),ドル其中 v 为 nums 的值域。看一下数据范围,很明显会超时。
6868

69-
我们可以先对数组排序,这样就可以二分找答案,使得时间复杂度降低。看下时间复杂度排序的时间是可以允许的,因此这种解决可以 ac
69+
假设我们最终形成的连续区间是 [l, r],那么 nums[i] 一定有一个是在端点的,因为如果都不在端点,变成在端点不会使得答案更差。这样我们可以枚举 nums[i] 作为 l 或者 r,分别判断在这种情况下我们可以保留的数字个数最多是多少
7070

71-
 具体地:
71+
为了减少时间复杂度,我们可以先对数组排序,这样就可以二分找答案,使得时间复杂度降低。看下时间复杂度排序的时间是可以允许的,因此这种解决可以 ac。
72+
73+
具体地:
7274

7375
- 对数组去重
7476
- 对数组排序
75-
- 遍历 nums,对于每一个 num 我们都二分找到最左和最右的**满足值域差小于等于 old_n 的索引**,其中 old_n 为去重前的 nums 长度。简单来说,我们需要找到满足值在 [x,num] 范围的最左 x 和满足值在 [num,y] 范围的最右 y
76-
- 满足两个值域范围的区间我们找到了,那么答案区间长度的最大值,也就是 n - 区间长度中的**最小值**
77+
- 遍历 nums,对于每一个 num 我们需要找到其作为左端点时,那么右端点就是 v + on - 1,于是我们在这个数组中找值在 num 和 v + on - 1 的有多少个,这些都是可以保留的。剩下的我们需要通过替换得到。 num 作为右端点也是同理。这两种我们需要找最优的。所有 i 的最优解就是答案。
78+
7779

78-
具体参考下方代码。
80+
具体参考下方代码。
7981

8082
## 关键点
8183

8284
- 反向思考,题目要找最少操作数,其实就是找最多保留多少个数
85+
- 对于每一个 num 我们需要找到其作为左端点时,那么右端点就是 v + on - 1,于是我们在这个数组中找值在 num 和 v + on - 1 的有多少个,这些都是可以保留的
86+
- 排序 + 二分 减少时间复杂度
8387

8488
## 代码
8589

@@ -99,8 +103,9 @@ class Solution:
99103
nums.sort()
100104
n = len(nums)
101105
for i, v in enumerate(nums):
102-
r = bisect.bisect_right(nums, v + on - 1)
103-
l = bisect.bisect_left(nums, v - on + 1)
106+
# nums[i] 一定有一个是在端点的,如果都不在端点,变成在端点不会使得答案更差
107+
r = bisect.bisect_right(nums, v + on - 1) # 枚举 i 作为左端点
108+
l = bisect.bisect_left(nums, v - on + 1) # 枚举 i 作为右端点
104109
ans = min(ans, n - (r - i), n - (i - l + 1))
105110
return ans + (on - n)
106111

0 commit comments

Comments
(0)

AltStyle によって変換されたページ (->オリジナル) /