453. Minimum Moves to Equal Array Elements

来源:互联网 发布:知乎 陌生人 编辑:程序博客网 时间:2024/05/18 03:23

这里写图片描述

这道题的原理是每次数组的n-1个数要加一个值,直到最后所有值相等,增加的值就是当前数组的最大值减最小值的差值。
开始我还每次都把数组算出来,求出每次的最大值和最小值,这样很耗时,结果超时了。
错误做法

class Solution {public:    int minMoves(vector<int>& nums)     {        int minindex=FindMinIndex(nums);        int maxindex=FindMaxIndex(nums);        int step=0;        while(nums[minindex]<nums[maxindex])        {            int differ=nums[maxindex]-nums[minindex];            step=step+differ;            for(int i=0;i<nums.size();i++)            {                if(i==maxindex)                    continue;                nums[i]=nums[i]+differ;            }            minindex=FindMinIndex(nums);            maxindex=FindMaxIndex(nums);        }        return step;    }    int FindMinIndex(vector<int>& nums)    {        int index=0;        int min=nums[0];        for(int i=1;i<nums.size();i++)        {            if(nums[i]<min)            {                index=i;                min=nums[i];            }        }        return index;    }    int FindMaxIndex(vector<int>& nums)    {        int index=0;        int max=nums[0];        for(int i=1;i<nums.size();i++)        {            if(nums[i]>max)            {                index=i;                max=nums[i];            }        }        return index;    }};

第二种做法:后来想到只要求出数组所右元素减去最小值得累加和,就是要增加的步数。

class Solution {public:    int minMoves(vector<int>& nums)     {        if(nums.size()==1)            return 0;        int minindex=FindMinIndex(nums);        int moves=0;        for(int i=0;i<nums.size();i++)        {            moves=moves+nums[i]-nums[minindex];        }        return moves;    }    int FindMinIndex(vector<int>& nums)    {        int index=0;        int min=nums[0];        for(int i=1;i<nums.size();i++)        {            if(nums[i]<min)            {                index=i;                min=nums[i];            }        }        return index;    }};
0 0
原创粉丝点击