zoukankan      html  css  js  c++  java
  • LeetCode 453. 最小移动次数使数组元素相等

    题目描述:

    解法一(暴力法):

    class Solution {
    public:
        int minMoves(vector<int>& nums) {
            int res=0;
            int mmax=0,mmin=0;
            while(1){
                for(int i=0;i<nums.size();i++){
                    if(nums[i]>nums[mmax])
                        mmax=i;
                    if(nums[i]<nums[mmin])
                        mmin=i;
                }
                if(nums[mmin]==nums[mmax])
                    break;
                for(int i=0;i<nums.size();i++){
                    if(i!=mmax)
                        nums[i]++;
                }
                res++;
            }
            return res;
        }
    };

    解法二(改进暴力法):

    class Solution {
    public:
        int minMoves(vector<int>& nums) {
            int res = 0;
            int mmax = 0, mmin = 0;
            while (1) {
                for (int i = 0; i<nums.size(); i++) {
                    if (nums[i]>nums[mmax])
                        mmax = i;
                    if (nums[i]<nums[mmin])
                        mmin = i;
                }
                if (nums[mmin] == nums[mmax])
                    break;
                int dis = nums[mmax] - nums[mmin];
                for (int i = 0; i<nums.size(); i++) {
                    if (i != mmax)
                        nums[i] += dis;
                }
                res += dis;
            }
            return res;
        }
    };

    解法三:

    class Solution {
    public:
        int minMoves(vector<int>& nums) {
            int res=0;
            sort(nums.begin(),nums.end());
            for(int i=1;i<nums.size();i++){
                res+=nums[i]-nums[0];
            }
            return res;
        }
    };
    
    class Solution {
    public:
        int minMoves(vector<int>& nums) {
            int res=0,min=0;
            for(int i=1;i<nums.size();i++){
                if(nums[i]<nums[min])
                    min=i;
            }
            for(int i=0;i<nums.size();i++){
                res+=nums[i]-nums[min];
            }
            return res;
        }
    };

    解法四(动态规划):

    class Solution {
    public:
        int minMoves(vector<int>& nums) {
            int moves=0;
            sort(nums.begin(),nums.end());
            for(int i=1;i<nums.size();i++){
                int diff=nums[i]+moves-nums[i-1];
                nums[i]+=moves;
                moves+=diff;
            }
            return moves;
        }
    };
    
    
    class Solution {
    public:
        int minMoves(vector<int>& nums) {
            int moves=0;
            sort(nums.begin(),nums.end());
            for(int i=1;i<nums.size();i++){
                nums[i]+=moves;
                int diff=nums[i]-nums[i-1];
                moves+=diff;
            }
            return moves;
        }
    };

    参考:https://leetcode-cn.com/problems/minimum-moves-to-equal-array-elements/solution/zui-xiao-yi-dong-ci-shu-shi-shu-zu-yuan-su-xiang-d/

  • 相关阅读:
    任意代码执行实例
    任意代码执行漏洞
    Port Hacking
    任意命令执行漏洞
    sql注入基于错误-单引号-字符型
    与SQL注入第一次相遇
    Hibernate基础知识
    TxQueryRunner类对结果集封装成bean、map及object的操作
    map的数据创建任意类的JavaBean对象
    UUID产生的JAR
  • 原文地址:https://www.cnblogs.com/oneDongHua/p/14264003.html
Copyright © 2011-2022 走看看