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 b3172f3

Browse files
Create Readme.md
1 parent bc1da6d commit b3172f3

File tree

1 file changed

+14
-0
lines changed
  • Two_Pointers/3634.Minimum-Removals-to-Balance-Array

1 file changed

+14
-0
lines changed
Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,14 @@
1+
### 3634.Minimum-Removals-to-Balance-Array
2+
3+
将数组从大到小排序之后,可以直观地想到:删减最小元素,And/Or 删减最大元素,都可以让剩余的最大值与最小值之间的倍数关系降到k以下。所以问题转变成了究竟删几个最小值和几个最大值。
4+
5+
假设我们保留最小值nums[0],我们可以找到nums[j]恰好使得`nums[j]>nums[i]*k`,这就意味着必须将从j到n-1的元素都删除才能符合要求。
6+
7+
假设我们删除最小值nums[0]但保留次小值nums[1],那么我们发现为了保证最大元素与最小元素的ratio不超过k,那么j的极限位置可以单调地右移。确定了新的j之后,我们发现此时需要删除1+n-j个元素,其中1个是左边删除的小数,n-j个是右边删除的大数。
8+
9+
所以我们可以顺次移动左指针i,相应地单调移动右指针j,直至恰好`j==n || nums[j]>nums[i]*k`。此时两种情况:
10+
1. 如果`j==n`,说明ratio还没超过k,右端不需要删除任何数字。只需要删除左边的i个数字即可。
11+
2. 如果`nums[j]>nums[i]*k`,说明右端需要删除n-j个数字。左边需要删除i个数字。
12+
13+
遍历所有的i之后,取全局最小值。
14+

0 commit comments

Comments
(0)

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