LeetCode 最小移动次数使数组元素相等(递推+规律)

解决LeetCode问题,探讨如何用最少的移动次数使数组所有元素相等。通过分析,避免全数组排序,利用递推和规律减少计算量。
摘要由CSDN通过智能技术生成

给定一个长度为 n 的非空整数数组,找到让数组所有元素相等的最小移动次数。每次移动可以使 n - 1 个元素增加 1。
示例:

输入:
[1,2,3]
输出:
3
解释:
只需要3次移动(注意每次移动会增加两个元素的值):
[1,2,3]  =>  [2,3,3]  =>  [3,4,3]  =>  [4,4,4]

方法一:蛮力法。先将数组排序,然后从低向高逐渐使低端元素相等。

比如输入[1,1,8,10,10,6]升序排序得[1,1,6,8,10,10]
index = 1 从[1,1,6,8,10,10]到达[1,1,6,8,10,10],(在此之前花费了0次,nums[1]和nums[0]的间距为0,之前的间距为0,现在间距为0)花费0次(一共花费0次)
index = 2 从[1,1,6,8,10,10]到达[6,6,6,13,15,15],(在此之前花费了0次,nums[2]和nums[1]的间距为5,之前的间距为0,现在间距为5)花费5次(一共花费5次)
index = 3 从[6,6,6,13,15,15]达到[13,13,13,13,22,22],(在此之前花费了5次,nums[3]和nums[2]的间距为2,之前的间距为 5,现在间距为7)花费7次(一共花费12次)
index = 4 从[13,13,13,13,22,22]到达[22,22,22,22,22,33],(在此之前花费了12次,nums[4]和nums[3]的间距为2,之前的间距为7,现在间距为9)花费9次(一共花费21次)
index = 5 从[22,22,22,22,22,33]到达[33,33,33,33,33,33],(在此之前花费了21次,nums[5]和nums[4]的间距为2,之前的间距为9,现在间距为11)花费11次(一共花费32次)

但是我们并不需要修改数组中的所有元素,我们知道地推就行。

class Solution {
   <
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值