我在大学里被布置了一个任务,我不知道如何解决它:给定一个长度为 n的数组,我们需要使用两个动作(将数组的最小元素加 1 或从最大元素减 1 )以便k 个不同的数字在所有操作后保留在数组中。即从数组-1;-5; 7; 8; 2; 1; 10,你需要得到-1;-1;7; 7; 7; 2; 1. 可能有人遇到过类似的东西,不然只能从思路上整理一下,不知道接下来怎么办...
我在大学里被布置了一个任务,我不知道如何解决它:给定一个长度为 n的数组,我们需要使用两个动作(将数组的最小元素加 1 或从最大元素减 1 )以便k 个不同的数字在所有操作后保留在数组中。即从数组-1;-5; 7; 8; 2; 1; 10,你需要得到-1;-1;7; 7; 7; 2; 1. 可能有人遇到过类似的东西,不然只能从思路上整理一下,不知道接下来怎么办...
好的,升序排列。
现在我们使用两个指针方法。
让我们将左侧索引设置为
0,右侧索引也设置为 ,并开始移动右侧索引,直到窗口中从L到 的两个指针之间R-1出现完全不同的元素k。现在我们来计算右边的值的总和
RSum,右边的值需要减去多少个单位才能让右边的元素都变成像R-1-th,这就是为的初始值我们开始移动左边的指针,直到窗口中不同元素的个数变得小于
k,同时统计左边剩余的数量LSum。我们继续向右移动,和以前一样,递减
RSum。当正确的停止时,我们计算所需的单位数量并与MinOnes重复将包含完全不同元素的窗口推进
k到最后。