青训营-小R的城市稳定性挑战
问题描述
小R所在的国家有n
个城市,每个城市的人口为 a_i
。如果某个城市的人口不超过其他任何一个城市人口的两倍,那么这个城市就被认为是稳定的。国家可以对部分城市实施政策,从而改变它们的人口数量。你的任务是帮助小R找到最少需要对多少个城市进行人口修改,才能使所有城市都变得稳定。
例如:对于城市人口为 [1, 2, 3, 4]
的国家,最少需要对1个城市执行政策,才能使所有城市稳定。
测试样例
样例1:
输入:
n = 4 ,a = [1, 2, 3, 4]
输出:1
样例2:
输入:
n = 5 ,a = [1, 10, 20, 30, 40]
输出:2
样例3:
输入:
n = 3 ,a = [100, 50, 200]
输出:1
思路
每个城市的人口如果不超过其他城市人口的两倍,则这个城市是稳定的。换句话说,城市 i 的人口 a_i
和城市j的人口a_j
必须满足:

我们需要找出最少修改多少个城市的人口,才能使所有城市都满足这个条件。
滑动窗口:通过滑动窗口(或者双指针方法)来找到最长的稳定子数组。最长稳定子数组中的城市不需要修改,因此最少修改的城市数是 n - 最大稳定子数组长度
。
代码实现
1 |
|
本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 Xielei's Blog!