力扣-1.17-462

在这里插入图片描述
方法一:

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;
    }
}

猜你喜欢

转载自blog.csdn.net/Desperate_gh/article/details/112302785