diff --git a/src/main/java/com/cool/hot100/heap/Num215.java b/src/main/java/com/cool/hot100/heap/Num215.java new file mode 100644 index 0000000..78b3290 --- /dev/null +++ b/src/main/java/com/cool/hot100/heap/Num215.java @@ -0,0 +1,68 @@ +package com.cool.hot100.heap; + +/** + * Created with IntelliJ IDEA. + * + * @Author: Cool + * @Date: 2024/09/19/11:11 + * DayNumber 1 + * Hard 2 + * Level ? + */ +public class Num215 { + /** + * 桶排序 + * + * @param nums + * @param k + * @return + */ + public int findKthLargest(int[] nums, int k) { + int[] buckets = new int[20001]; + for (int i = 0; i < nums.length; i++) { + buckets[nums[i] + 10000]++; + } + for (int i = 20000; i >= 0; i--) { + k = k - buckets[i]; + if (k <= 0) { + return i - 10000; + } + } + return 0; + } + + /** + * 快速排序,思路参考双路快速排序 + * + * @param nums + * @param k + * @return + */ + public int findKthLargest1(int[] nums, int k) { + return quickSearch(nums, 0, nums.length - 1, nums.length - k); + } + + private int quickSearch(int[] nums, int left, int right, int k) { + if (left == right) + return nums[k]; + int num = nums[left], i = left - 1, j = right + 1; + while (i < j) { + do + i++; + while (nums[i] < num); + do + j--; + while (nums[j] > num); + if (i < j) { + int temp = nums[i]; + nums[i] = nums[j]; + nums[j] = temp; + } + } + if (k <= j) { + return quickSearch(nums, left, j, k); + } else { + return quickSearch(nums, j + 1, right, k); + } + } +}