zoukankan      html  css  js  c++  java
  • LeetCode

    链接

    453. Minimum Moves to Equal Array Elements

    题意

    给定一个大小为n的非空数组,定义这样一个操作(move):每次都可以选择n-1个元素进行加1操作,问需要多少次这样的操作可以使数组中的每个元素值相等。

    示例

    Input:
    [1,2,3]

    Output:
    3

    Explanation:
    Only three moves are needed (remember each move increments two elements):

    [1,2,3] => [2,3,3] => [3,4,3] => [4,4,4]

    思路

    为了最少步达到所有元素相等的状态,那么每次肯定是让除了最大元素外的所有元素加1。但这个题目仅仅要求所有元素相等,而并没有要求所有元素等于某个确定的值。所以可得,n-1个元素加1是为了更加接近最大值(其他元素和最大值的差距减1),那么可以逆向思维理解为:每次选取一个最大值减1,这样也是更加接近最小值(最大值和其他元素的差距减1)。那么次数就很好算了:每个数减最小数的值之和。也即:sum(arr)-n*min(arr)

    代码

    Java:

    public class Solution {
        public int minMoves(int[] nums) {
            int sum = 0;
            int min = Integer.MAX_VALUE;
            for (int i = 0; i < nums.length; i++) {
                sum += nums[i];
                if (nums[i] < min) min = nums[i];
            }
            return sum - nums.length * min;
        }
    }
    

    效率

    Your runtime beats 91.71% of java submissions

  • 相关阅读:
    Visio2019专业版激活方法
    I2C总线协议
    latch-up和Antenna-effect
    读--数字集成电路物理设计
    数字IC设计流程与工具
    读--FPGA设计指导原则
    读--数字集成电路设计与实现
    FIFO
    半导体存储器
    触发器
  • 原文地址:https://www.cnblogs.com/zyoung/p/6734044.html
Copyright © 2011-2022 走看看