一文徹底搞通TCP之send & recv原理
阿新 • • 發佈:2021-10-20
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/