Leetcode 453. 最小移动次数使数组元素相等
- 最小移动次数使数组元素相等
给定一个长度为 n 的非空整数数组,找到让数组所有元素相等的最小移动次数。每次移动将会使 n - 1 个元素增加 1。
示例:
输入:
[1,2,3]
输出:
3
解释:
只需要3次移动(注意每次移动会增加两个元素的值):
[1,2,3] => [2,3,3] => [3,4,3] => [4,4,4]
class Solution {
public int minMoves(int[] nums) {
//首先进行排序由小到大
quickSort(nums,0,nums.length - 1);
int sum = 0;
//求出每次最小值与当前值的差并求和
for(int i = 0;i < nums.length; i++){
sum += nums[i]-nums[0];
}
return sum;
}
//快速排序
public static void quickSort(int[] arr,int left,int right){
if(left >= right) return;
int l = left;
int r = right;
while(l < r){
while(l < r&&arr[l] <= arr[r]){
l++;
}
if(arr[l] > arr[r]){
int temp = arr[l];
arr[l] = arr[r];
arr[r] = temp;
}
while(l < r&&arr[l] <= arr[r]){
r--;
}
if(arr[l] > arr[r]){
int temp = arr[l];
arr[l] = arr[r];
arr[r] = temp;
}
}
quickSort(arr,left,l - 1);
quickSort(arr,r + 1,right);
}
}
执行结果:
通过
显示详情
执行用时:17 ms, 在所有 Java 提交中击败了8.75% 的用户
内存消耗:38.5 MB, 在所有 Java 提交中击败了99.91% 的用户