Super Washing Machines

https://leetcode.com/problems/super-washing-machines/


该题目会给出一个数组,然后让它的所有元素都转化为它们的平均值。要求每次进行转换时,只能是某个元素往相邻的一个元素给出1.一次操作时,每个元素都允许同时进行最多一次的操作,问最少的操作数。


首先先判断能否取平均数,即构建一个向量,向量的每一项都是上一项与该项对应的数组元素之和,即这个向量的最后一项就是所有元素之和。用它来判断出是否有平均数并且求出该平均数后,可以对向量的每一位进行如下比较:首先,将该位的值与对应的平均数(即平均数x该值)进行比较。根据题意可知,如果对应平均数小于该位,那就意味着该元素要向其左边的元素转移,转移的次数即是这个差值。这便是左移;其次,将数组的最后一位元素(即总和)减去该元素后,再比较平均数。如果对应平均数大于这个差值,那就意味着需要右移,与之前的相反。

此时便求出了要让该元素归位所需的左移和右移数。考虑到两者可以同时在一个元素上进行,因此求出其所需的移动数,即将两者相加。在上面算出的左移和右移数有正有负,若为负数即说明是反方向移动,即我们要将对应的元素全部左移或右移。此时即比较两者绝对值的大小,取较大的一方。之后,将算出来的数与当前的结果进行比较,如果算出来的数更大则将其写入结果,这样即完成了一次比较。如此类推,将所有的元素比较完成,所得的最终结果即为所求。


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值