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