From 73cf06a9d0cfaa942f160e7b6219863c994259b8 Mon Sep 17 00:00:00 2001 From: "guangxin.yuan" Date: 2025年5月26日 15:30:28 +0800 Subject: [PATCH] update --- src/Solution.java | 81 ----------------------------------------------- 1 file changed, 81 deletions(-) delete mode 100644 src/Solution.java diff --git a/src/Solution.java b/src/Solution.java deleted file mode 100644 index ce72957..0000000 --- a/src/Solution.java +++ /dev/null @@ -1,81 +0,0 @@ -public class Solution { - - // 找到旋转数组的最小值位置 - private static int findMinIndex(int[] nums) { - int left = 0; - int right = nums.length - 1; - - while (left < right) { - int mid = left + (right - left) / 2; - if (nums[mid]> nums[right]) { - left = mid + 1; - } else { - right = mid; - } - } - return left; // 最小值的位置 - } - - // 快速选择算法(类似快速排序的分区操作) - private static int quickSelect(int[] nums, int start, int end, int k) { - if (start == end) { - return nums[start]; - } - - int pivot = partition(nums, start, end); - - if (pivot == k) { - return nums[pivot]; - } else if (pivot> k) { - return quickSelect(nums, start, pivot - 1, k); - } else { - return quickSelect(nums, pivot + 1, end, k); - } - } - - // 快速排序的分区操作 - private static int partition(int[] nums, int start, int end) { - int pivot = nums[end]; - int i = start - 1; - - for (int j = start; j < end; j++) { - if (nums[j]>= pivot) { // 从大到小排序 - i++; - swap(nums, i, j); - } - } - - swap(nums, i + 1, end); - return i + 1; - } - - // 交换数组中的两个元素 - private static void swap(int[] nums, int i, int j) { - int temp = nums[i]; - nums[i] = nums[j]; - nums[j] = temp; - } - - // 主函数:在旋转数组中找到第 k 大的数字 - public static int findKthLargest(int[] nums, int k) { - int minIndex = findMinIndex(nums); // 找到最小值的位置 - int n = nums.length; - - // 将数组分为两部分,分别查找第 k 大的数字 - if (k <= n - minIndex) { - // 第 k 大的数字在后半部分 - return quickSelect(nums, minIndex, n - 1, k - 1); - } else { - // 第 k 大的数字在前半部分 - return quickSelect(nums, 0, minIndex - 1, k - (n - minIndex) - 1); - } - } - - public static void main(String[] args) { - int[] nums = {4, 5, 6, 7, 0, 1, 2}; - int k = 3; - - int result = findKthLargest(nums, k); - System.out.println("第 " + k + " 大的数字是: " + result); - } -} \ No newline at end of file

AltStyle によって変換されたページ (->オリジナル) /