题目描述:
给你一个长度为 n
的整数数组,每次操作将会使 n - 1
个元素增加 1
。返回让数组所有元素相等的最小操作次数。
数据范围:
$1\le nums.len \le 10^5$
题解:
考虑反面,对 $n - 1$ 个数加 $1$ ,从大小关系上来说,相当于对一个数减 $1$ 。因此可以考虑该操作为对一个数减 $1$ 。这样的话就很简单了,只需要累加一下每个数与最小值的差值即可。
代码:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24
| auto optimize_cpp_stdio = []() { std::ios::sync_with_stdio(false); std::cin.tie(nullptr); std::cout.tie(nullptr); return 0; }(); class Solution { public: const static int maxn = 1e5 + 10; const static int maxm = 1e5 + 10; const int INF = 0x3f3f3f3f; int minMoves(vector<int> &nums) { sort(nums.begin(), nums.end()); int ans = 0; for (auto &x : nums) { ans += x - nums[0]; } return ans; } };
|