1. 程式人生 > 其它 >一文徹底搞通TCP之send & recv原理

一文徹底搞通TCP之send & recv原理

215. 陣列中的第K個最大元素

public class Algorithm {

    public static void main(String[] args) {

        int[] arr = {3,2,3,1,2,4,5,5,6};
        System.out.println(new Solution().findKthLargest(arr, 4));

    }
}

class Solution {
    public int findKthLargest(int[] nums, int k) {

        int temp = 0;

        /**
         * 陣列排序後的第k個最大的元素,不是第k個不同的元素,因此就是陣列排好序從右往左數的第k個元素
         */
        int target = nums.length - k;
        sort(nums, 0, nums.length - 1, target, temp);

        return nums[nums.length - k];
    }

    public static void sort(int[] arr, int left, int right, int target, int temp){

        int p = partition(arr, left, right, temp);

        /**
         * 使用雙路排序法,如果返回的索引剛好是目標,就直接return
         * 否則只用判斷一個區間
         */
        if (p == target){
            return;
        }
        else if (target < p) {
            sort(arr, left, p - 1, target, temp);
        }
        else {
            sort(arr, p + 1, right, target, temp);
        }
    }

    public static<E extends Comparable<E>> int partition(int[] arr, int left, int right, int temp) {

        int i = left + 1;
        int j = right;

        while (i <= j){

            if (arr[i] < arr[left]){
                i++;
            }
            else if (arr[j] > arr[left]){
                j--;
            }
            else {
                swap(arr, i, j);
                i++;
                j--;
            }
        }

        swap(arr, j, left);

        return j;
    }

    public static void swap(int[] arr, int i, int j) {

        int temp;
        temp = arr[i];
        arr[i] = arr[j];
        arr[j] = temp;
    }
}

https://leetcode-cn.com/problems/kth-largest-element-in-an-array/