LuoJunC

  博客园  :: 首页  :: 新随笔  :: 联系 :: 订阅 订阅  :: 管理

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]

My Solution:

public class Solution {
    public int minMoves2(int[] nums) {
        Arrays.sort(nums);
        int baseNum = (int)Math.ceil(nums.length/2);
        int count = 0;
        
        for(int i = 0; i < nums.length; i++){
            if(nums[i] < nums[baseNum]){
                count += nums[baseNum] - nums[i];
            }else if(nums[i] > nums[baseNum]){
                count += nums[i] - nums[baseNum];
            }
        }
        
        return count;
    }
}

Others' Solution:

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

 

posted on 2017-02-22 16:28  LuoJunC  阅读(119)  评论(0)    收藏  举报