最小操作次数使数组元素相等
数组 操作 元素 最小 次数 相等
2023-09-11 14:17:55 时间
原题链接:
https://leetcode-cn.com/problems/minimum-moves-to-equal-array-elements/
题目描述
给你一个长度为 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,那么我假设目前数组的总和为sum,最少需要移动的次数为m,所以说整体数组的总和最终会增加m * (n - 1)。
小明: 宇哥所言极是!👍
宇哥: 最终所有元素都相等,这里我设为x。那么,sum + m * (n - 1) = x * n;
小明: 对,就是这样。然后呢?这不还是有两个未知数嘛,无解呀🙃
宇哥: 别急嘛,这里我假设数组中最小的元素为min,你难道没发现m = x - min😏
小明: 嗦嘎!😮,所以联立这两个方程就可以得出m = sum - min * n;
宇哥: Bingo!🎉
注意: 此处还应考虑到数据超出范围的问题!
AC代码:
class Solution {
public:
int minMoves(vector<int>& nums) {
int ans = 0;
sort(nums.begin(),nums.end());
int min = nums[0], n = nums.size();
for(int i = 0; i < n; i++){
ans += nums[i] - min;
}
return ans;
}
};
相关文章
- C#字符串、字节数组和内存流间的相互转换
- Shell数组操作(添加、删除元素、清空、遍历)
- 【Vue】Vue中操作对【数组和对象】操作示例大全(图文+完整代码)
- 手动操作导航控制器的子视图控制器的数组
- matlab学习笔记11_2高维数组操作 squeeze,ind2sub, sub2ind
- 复盘:下面的这两个随机数组“a”和“b”:请问数组c=a+b的维度是多少
- LeetCode高频题:最少经过几次操作可以使数组变为非降序状态
- 贪心策略:不断循环操作数组arr中的任意两个数,当只剩下1个数,返回这个数可能的最大值
- js forEach参数详解,forEach与for循环区别,forEach中如何删除数组元素
- JS商品查询案例 【利用数组新增方法操作数据】
- 【Python】数字数组拼接为字符串
- JavaScript数组操作函数方法详解
- 如何删除数组中的某个元素(C/Python/Java/Go/MATLAB)
- Python代码大全之数组快速存储到sqlite数据库(含代码)
- 操作数组的方法集合
- 【php】 jsonp转数组函数jsonp_decode
- 力扣解法汇总1827. 最少操作使数组递增
- 微信小程序-数组操作
- php数组操作,内容相同,键值不同,互换
- ElasticSearh更新nested字段(Array数组)。怎么根据查询条件(query)复制一个(index)到新的Index how to update by query a nested fields data for elasticsearch
- C语言数组和指针的理解_在取地址运算上的操作_指针加减操作_a 和&a 的区别
- Java中为何用char[]数组来操作密码