方法一:
class Solution {
public int minMoves2(int[] nums) {
Arrays.sort(nums);
int l = 0, h = nums.length - 1;
int move = 0;
while (l < h) {
move += nums[h] - nums[l];
h--;
l++;
}
return move;
}
}
方法二:应用快排,其实变得更慢了
class Solution {
public void swap (int nums[], int i ,int j) {
int temp = nums[i];
nums[i] = nums[j];
nums[j] = temp;
}
public int partition(int nums[], int l, int h) {
int temp = nums[l];
int i = l ,j = h;
while (i < j) {
while (nums[j] >= temp && j > i) {
j--;
}
while (nums[i] <= temp && i < j) {
i++;
}
if (i < j) {
swap(nums, i, j);
}
}
swap(nums, l, j);
return j;
}
public int findKthSmallest(int nums[], int k) {
int l = 0, h = nums.length - 1;
while (l < h) {
int current = partition(nums, l, h);
if (current == k) {
break;
} else if (current < k) {
l = current + 1;
} else {
h = current - 1;
}
}
return nums[k];
}
public int minMoves2(int[] nums) {
int move = 0;
int median = findKthSmallest(nums, nums.length / 2);
for (int num : nums) {
move += Math.abs(median - num);
}
return move;
}
}