1. 程式人生 > 遊戲攻略 >《戰地2042》全載具使用心得 全載具駕駛技巧

《戰地2042》全載具使用心得 全載具駕駛技巧

給定整數陣列 nums 和整數 k,請返回陣列中第 k 個最大的元素。

請注意,你需要找的是陣列排序後的第 k 個最大的元素,而不是第 k 個不同的元素。

來源:力扣(LeetCode)
連結:https://leetcode-cn.com/problems/kth-largest-element-in-an-array
著作權歸領釦網路所有。商業轉載請聯絡官方授權,非商業轉載請註明出處。

class Solution {

    private void swap(int[] nums, int a, int b) {
        int tmp = nums[a];
        nums[a] = nums[b];
        nums[b] = tmp;
    }

    private int[] partition(int[] nums, int L, int R) {
        int pivot = nums[L + (int) (Math.random() * (R - L + 1))];
        int l = L - 1, r = R + 1, cur = L;
        while (cur < r) {
            if (nums[cur] == pivot) {
                cur++;
            } else if (nums[cur] > pivot) {
                swap(nums, ++l, cur++);
            } else {
                swap(nums, --r, cur);
            }
        }
        return new int[]{l + 1, r - 1};
    }


    private int solve(int[] nums, int k) {
        int l = 0, r = nums.length - 1;

        while (l < r) {
            int[] partition = partition(nums, l, r);
            if (k >= partition[0] && k <= partition[1]) {
                return nums[k];
            } else if (k < partition[0]) {
                r = partition[0] - 1;
            } else {
                l = partition[1] + 1;
            }
        }

        return nums[l];
    }

    public int findKthLargest(int[] nums, int k) {
        return solve(nums, k - 1);
    }
}
心之所向,素履以往 生如逆旅,一葦以航