码农知识堂 - 1000bd
  •   Python
  •   PHP
  •   JS/TS
  •   JAVA
  •   C/C++
  •   C#
  •   GO
  •   Kotlin
  •   Swift
  • leetcode 462. Minimum Moves to Equal Array Elements II (使数组元素相等的最小move数II)


    Given an integer array nums of size n, return the minimum number of moves required to make all array elements equal.

    In one move, you can increment or decrement an element of the array by 1.

    Test cases are designed so that the answer will fit in a 32-bit integer.

    Example 1:

    Input: nums = [1,2,3]
    Output: 2
    Explanation:
    Only two moves are needed (remember each move increments or decrements one element):
    [1,2,3] => [2,2,3] => [2,2,2]
    Example 2:

    Input: nums = [1,10,2,9]
    Output: 16

    给一个数组nums,让用最小的move数使nums里面的元素全部相等。
    一个move指的是对元素+1或-1。

    思路:

    先假设一个1~10连续数字的情形,假设1~10都向某个数字x靠拢,就是如下:
    在这里插入图片描述
    因为假设的是连续数字,所以需要的move数就是两个三角形的面积和,
    0.5 * (x-1) * (x-1) + 0.5 * (10-x) * (10-x) = x2 - 11x + 50.5

    它是个凸函数,在导数为0的地方取最小值,于是在中位数的地方取最小值。

    同样的,本题的最小move数也是向中位数靠拢。
    所以要先把数组nums排序。

    可以用一个loop遍历nums中的每个元素,move为每个元素与中位数之差的和。

    但是可以发现,假设中位数是x,
    每一步的move数为(x - nums[i]) + (nums[n-1-i] - x) = nums[n-1-i] - nums[i]
    与中位数具体是多少无关。

    于是变成了双指针。

    public int minMoves2(int[] nums) {
        int n = nums.length;
        int left = 0;
        int right = n - 1;
        int res = 0;
        
        Arrays.sort(nums);
        
        while(left < right) {
            res += nums[right] - nums[left];
            left ++;
            right --;
        }
        return res;
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15

    参考链接

  • 相关阅读:
    Segmentation-Based Deep-Learning Approach for Surface-Defect Detection-论文阅读笔记
    C语言为什么for不执行?
    Spring中循环依赖问题以及解决方案
    LT6911C是HDMI1.4转双MIPIDSI/CSI带音频
    供应商管理软件有哪些特点和优势?
    一本通1053;最大数输出
    python——单例模式
    xlnet+bilstm实现菜品正负评价分类
    Docker build创建指定容器镜像
    软件测试/测试开发/人工智能丨 利用ChatGPT编写测试用例
  • 原文地址:https://blog.csdn.net/level_code/article/details/125555324
  • 最新文章
  • 攻防演习之三天拿下官网站群
    数据安全治理学习——前期安全规划和安全管理体系建设
    企业安全 | 企业内一次钓鱼演练准备过程
    内网渗透测试 | Kerberos协议及其部分攻击手法
    0day的产生 | 不懂代码的"代码审计"
    安装scrcpy-client模块av模块异常,环境问题解决方案
    leetcode hot100【LeetCode 279. 完全平方数】java实现
    OpenWrt下安装Mosquitto
    AnatoMask论文汇总
    【AI日记】24.11.01 LangChain、openai api和github copilot
  • 热门文章
  • 十款代码表白小特效 一个比一个浪漫 赶紧收藏起来吧!!!
    奉劝各位学弟学妹们,该打造你的技术影响力了!
    五年了,我在 CSDN 的两个一百万。
    Java俄罗斯方块,老程序员花了一个周末,连接中学年代!
    面试官都震惊,你这网络基础可以啊!
    你真的会用百度吗?我不信 — 那些不为人知的搜索引擎语法
    心情不好的时候,用 Python 画棵樱花树送给自己吧
    通宵一晚做出来的一款类似CS的第一人称射击游戏Demo!原来做游戏也不是很难,连憨憨学妹都学会了!
    13 万字 C 语言从入门到精通保姆级教程2021 年版
    10行代码集2000张美女图,Python爬虫120例,再上征途
Copyright © 2022 侵权请联系2656653265@qq.com    京ICP备2022015340号-1
正则表达式工具 cron表达式工具 密码生成工具

京公网安备 11010502049817号