持续创作,加速成长!这是我参与「掘金日新计划 · 6 月更文挑战」的第20天,点击查看活动详情
一、题目描述:
给你一个长度为
n的整数数组,每次操作将会使n - 1个元素增加1。返回让数组所有元素相等的最小操作次数。
示例 1:
输入:nums = [1,2,3]
输出:3
解释:
只需要3次操作(注意每次操作会增加两个元素的值):
[1,2,3] => [2,3,3] => [3,4,3] => [4,4,4]
示例 2:
输入:nums = [1,1,1]
输出:0
提示:
- n == nums.length
- 1 <= nums.length <= 105
- -109 <= nums[i] <= 109
- 答案保证符合 32-bit 整数
二、思路分析:
本题目的是让所有元素最后相等,而并不在意各元素最后到底是多少,根本上是在对各元素的相对值进行操作。
不难得出,n-1个元素加1,针对各元素的相对大小来看,等效于1个元素减1。则即求让所有元素都变为最小值需要的操作数。
则我们只要累加所有元素后,再减去数组长度乘以数组的最小元素即可。
特别的,我们在累加时的循环中寻找最小值,节约时间;将累加和定义为长整型是担心数字过大。 时间击败100%,内存过半。
三、AC 代码:
class Solution
{
public int minMoves(int[] nums)
{
long res=0L;
int min=nums[0];
for(int i=0;i<nums.length;i++)
{
res+=nums[i];
if(min>nums[i])
{
min=nums[i];
}
}
return (int)(res-min*nums.length);
}
}
范文参考:
囧么肥事-短话长说-图解数组篇-【435】最小移动次数使数组元素相等 - 最小操作次数使数组元素相等 - 力扣(LeetCode)
头一次自己找规律找出来,哈哈哈哈,我就知道简单题不能考算法,而且数据规模到了五次方,一般就是规律题,生看出来的,每个元素与最小值差值的和 - 最小操作次数使数组元素相等 - 力扣(LeetCode)