Skip to content

Commit 36eeb4b

Browse files
committed
六刷215
1 parent 47dc67d commit 36eeb4b

File tree

3 files changed

+105
-1
lines changed

3 files changed

+105
-1
lines changed

docs/0215-kth-largest-element-in-an-array.adoc

Lines changed: 13 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
[#0215-kth-largest-element-in-an-array]
22
= 215. 数组中的第K个最大元素
33

4-
https://leetcode.cn/problems/kth-largest-element-in-an-array/[LeetCode - 215. 数组中的第K个最大元素 ^]
4+
https://leetcode.cn/problems/kth-largest-element-in-an-array/[LeetCode - 215. 数组中的第K个最大元素^]
55

66
给定整数数组 `nums` 和整数 `k`,请返回数组中第 *`k`* 个最大的元素。
77

@@ -36,6 +36,8 @@ image::images/0215-01.gif[{image_attr}]
3636

3737
image::images/0215-02.png[{image_attr}]
3838

39+
NOTE: 好久不写,生疏了!
40+
3941
[[src-0215]]
4042
[tabs]
4143
====
@@ -83,12 +85,22 @@ include::{sourcedir}/_0215_KthLargestElementInAnArray_4.java[tag=answer]
8385
include::{sourcedir}/_0215_KthLargestElementInAnArray_5.java[tag=answer]
8486
----
8587
--
88+
89+
六刷::
90+
+
91+
--
92+
[{java_src_attr}]
93+
----
94+
include::{sourcedir}/_0215_KthLargestElementInAnArray_6.java[tag=answer]
95+
----
96+
--
8697
====
8798

8899
== 参考资料
89100

90101
. https://en.wikipedia.org/wiki/Quickselect[Quickselect - Wikipedia^]
91102
. https://leetcode.cn/problems/kth-largest-element-in-an-array/solutions/307351/shu-zu-zhong-de-di-kge-zui-da-yuan-su-by-leetcode-/[215. 数组中的第K个最大元素 - 官方题解^]
92103
. https://leetcode.cn/problems/kth-largest-element-in-an-array/solutions/2361969/215-shu-zu-zhong-de-di-k-ge-zui-da-yuan-d786p/[215. 数组中的第K个最大元素 - 分治,清晰图解^]
104+
. https://leetcode.cn/problems/kth-largest-element-in-an-array/solutions/3717020/leetcode-215yi-ti-duo-jie-ji-shu-xuan-ze-664r/[215. 数组中的第K个最大元素 - 计数选择法,快速选择法,堆选择法,多种解法+写法,详细分析^]
93105

94106

logbook/202503.adoc

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1524,6 +1524,11 @@ endif::[]
15241524
|{doc_base_url}/0347-top-k-frequent-elements.adoc[题解]
15251525
|✅ Top K 问题,优先队列;桶排序;也可以利用快速选择。
15261526

1527+
|{counter:codes2503}
1528+
|{leetcode_base_url}/kth-largest-element-in-an-array/[215. 数组中的第K个最大元素^]
1529+
|{doc_base_url}/0215-kth-largest-element-in-an-array.adoc[题解]
1530+
|⭕️ 快速选择。有思路,但代码总报错!还需要多练!
1531+
15271532
|===
15281533

15291534
截止目前,本轮练习一共完成 {codes2503} 道题。
Lines changed: 87 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,87 @@
1+
package com.diguage.algo.leetcode;
2+
3+
public class _0215_KthLargestElementInAnArray_6 {
4+
// tag::answer[]
5+
6+
/**
7+
* @author D瓜哥 · https://www.diguage.com
8+
* @since 2025-04-30 07:16:18
9+
*/
10+
public int findKthLargest(int[] nums, int k) {
11+
return quickselect(nums, 0, nums.length - 1, nums.length - k);
12+
}
13+
14+
private int quickselect(int[] nums, int l, int r, int k) {
15+
if (l == r) {
16+
return nums[k];
17+
}
18+
int x = nums[l], i = l - 1, j = r + 1;
19+
while (i < j) {
20+
do {
21+
i++;
22+
} while (nums[i] < x);
23+
do {
24+
j--;
25+
} while (x < nums[j]);
26+
if (i < j) {
27+
int tmp = nums[i];
28+
nums[i] = nums[j];
29+
nums[j] = tmp;
30+
}
31+
}
32+
if (k <= j) {
33+
return quickselect(nums, l, j, k);
34+
} else {
35+
return quickselect(nums, j + 1, r, k);
36+
}
37+
}
38+
// public int findKthLargest(int[] nums, int k) {
39+
// if (nums.length == 1) {
40+
// return nums[0];
41+
// }
42+
// int index = partition(nums, 0, nums.length - 1);
43+
// k = nums.length - k;
44+
// int low = 0, high = nums.length - 1;
45+
// while (index != k) {
46+
// if (index < k) {
47+
// low = index + 1;
48+
// } else {
49+
// high = index - 1;
50+
// }
51+
// index = partition(nums, low, high);
52+
// }
53+
// return nums[k];
54+
// }
55+
56+
// private int partition(int[] nums, int low, int hight) {
57+
// int priovt = nums[low];
58+
// int l = low, h = hight + 1;
59+
// while (true) {
60+
// while (nums[++l] < priovt) {
61+
// if (l == hight) {
62+
// break;
63+
// }
64+
// }
65+
// while (nums[--h] > priovt) {
66+
// if (h == low) {
67+
// break;
68+
// }
69+
// }
70+
// if (l >= h) {
71+
// break;
72+
// }
73+
// int temp = nums[l];
74+
// nums[l] = nums[h];
75+
// nums[h] = temp;
76+
// }
77+
// nums[low] = nums[h];
78+
// nums[h] = priovt;
79+
// return h;
80+
// }
81+
82+
// end::answer[]
83+
public static void main(String[] args) {
84+
new _0215_KthLargestElementInAnArray_6()
85+
.findKthLargest(new int[]{3, 2, 1, 5, 6, 4}, 2);
86+
}
87+
}

0 commit comments

Comments
 (0)