453.[Leetcode]Minimum Moves to Equal Array Elements

来源:互联网 发布:淘宝网四件套100元之内 编辑:程序博客网 时间:2024/05/21 09:18

注:之后的题,我都会尝试用Python来写一遍,因为在学习python

原题链接

public class Solution {    public int minMoves(int[] nums) {        // 1. 找出最大,第二大,最小,三个数        // 2. 通过最大,最小,判断是否全部相等        // 3. 通过最大,第二大,获得要增加多少步        boolean allEqu = false;        int count = 0;        while(true){            int max = nums[0];            int max_2 = nums[0];            int min = nums[0];            int maxPos = 0;            int max_2Pos = 0;            int minPos = 0;            for(int i=1;i<nums.length;i++){                if(nums[i]>max){                    max = nums[i];                    maxPos= i;                } else if(nums[i]<max && nums[i]>max_2){                    max_2 = nums[i];                    max_2Pos = i;                } else if(nums[i]<min){                    min = nums[i];                    minPos = i;                }            }            if(min == max) break;            int d = max-min;            count += d;            for(int i=0;i<nums.length;i++){                if(i!=maxPos){                    nums[i]+=d;                }            }        }        return count;    }}

当然这样写必定会超时间,题目上提示的是,Math,所以我们不难找出其中的数学规律:

public class Solution {    public int minMoves(int[] nums) {        // 1. 给nums排序,从大到小        // 2. 最后的加的次数 c = d1 + d2*2 + d3*3 + ...        Arrays.sort(nums);        int count = 0;        int sum = 0;        for(int i=nums.length-1;i>0;i--){            count++;            sum += (nums[i]-nums[i-1])*count;        }        return sum;    }}

python代码如下:

class Solution(object):    def minMoves(self, nums):        """        :type nums: List[int]        :rtype: int        """        nums.sort(reverse=True)#这个是Python中的关键字参数        count,sum = 0,0        for index in range(len(nums)-1):            count += 1            sum += (nums[index]-nums[index+1])*count        return sum
0 0
原创粉丝点击