LeetCode——Minimum Moves to Equal Array Elements

Given a non-empty integer array of size n, find the minimum number of moves required to make all array elements equal, where a move is incrementing n - 1 elements by 1.

Example:

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]

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

}

本题思路

Given a non-empty integer array, find the minimum number of moves required to make all array elements equal, where a move is incrementing a selected element by 1 or decrementing a selected element by 1.

You may assume the array’s length is at most 10,000.

Example:

Input:
[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]

public class Solution {
public int minMoves2(int[] nums) {
    Arrays.sort(nums) ;
    int i = 0 ;
    int j = nums.length - 1 ;
    int cnt = 0 ;
    while( i <= j )
    {
        cnt += nums[j] - nums[i];
        i++;
        j--;
    }
        return cnt;
    }
}

感想

在做第一题的时候就压根没觉得这是数学题
做第二题的时候又用为第一题的方法想用数学去解决
然而发现这是在自己给自己找麻烦
所以说 ,要多看多学多用脑,脑子是个好东西。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值