leetcode 462. 最小操作次数使数组元素相等 II 中等

给你一个长度为 n 的整数数组 nums ,返回使所有数组元素相等需要的最小操作数。

在一次操作中,你可以使数组中的一个元素加 1 或者减 1 。

测试用例经过设计以使答案在 32 位 整数范围内。

示例 1:

复制代码
输入:nums = [1,2,3]
输出:2
解释:
只需要两次操作(每次操作指南使一个元素加 1 或减 1):
[1,2,3]  =>  [2,2,3]  =>  [2,2,2]

示例 2:

复制代码
输入:nums = [1,10,2,9]
输出:16

提示:

  • n == nums.length
  • 1 <= nums.length <= 10^5
  • -10^9 <= nums[i] <= 10^9

分析:把所有数都变成 nums 的中位数时,总操作次数最少。详细证明可以看知乎的帖子: https://zhuanlan.zhihu.com/p/1922938031687595039

cpp 复制代码
class Solution {
public:
    int minMoves2(vector<int>& nums) {
        int n=nums.size(),ans=0;
        if(n==1)return 0;
        sort(nums.begin(),nums.end());
        int avg=nums[n/2],temp=0;
        for(int i=0;i<n;++i)
            temp+=nums[i]-avg>0?nums[i]-avg:avg-nums[i];
        ans=temp;temp=0;
        if(n%2==0)
        {
            avg=nums[n/2-1];
            for(int i=0;i<n;++i)
                temp+=nums[i]-avg>0?nums[i]-avg:avg-nums[i];
            ans=min(ans,temp);
        }
        return ans;
    }
};
相关推荐
Navigator_Z2 小时前
LeetCode //C - 1313. Decompress Run-Length Encoded List
c语言·算法·leetcode
Nuanyt3 小时前
LeetCode Hot 100 链表专题(四)· 3 题(Java)
java·算法·leetcode·链表·双指针
圣保罗的大教堂15 小时前
leetcode 453. 最小操作次数使数组元素相等 中等
leetcode
Tisfy19 小时前
LeetCode 0453.最小操作次数使数组元素相等:两次遍历(反向思维)
算法·leetcode·题解·遍历·反向思维
君万19 小时前
【LeetCode每日一题】回溯:46. 全排列 78. 子集 39. 组合总和
算法·leetcode·go
Tisfy21 小时前
LeetCode 3665.统计镜子反射路径数目:三个动态规划数组
leetcode·动态规划·代理模式·题解
海绵宝宝转agent1 天前
LeetCode100 二叉树个人题解
算法·leetcode·深度优先
文丑颜不良啊1 天前
LeetCode1581~1600题目解析
java·leetcode
文丑颜不良啊1 天前
LeetCode1541~1560题目解析
java·leetcode