《戰地2042》全載具使用心得 全載具駕駛技巧
阿新 • • 發佈:2021-11-24
給定整數陣列 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); } }