Skip to content

Commit ff4db53

Browse files
committed
三刷215
1 parent a056dfd commit ff4db53

File tree

3 files changed

+65
-0
lines changed

3 files changed

+65
-0
lines changed

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

Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -36,15 +36,35 @@ image::images/0215-01.gif[{image_attr}]
3636
image::images/0215-02.png[{image_attr}]
3737
3838
[[src-0215]]
39+
[tabs]
40+
====
41+
一刷::
42+
+
43+
--
3944
[{java_src_attr}]
4045
----
4146
include::{sourcedir}/_0215_KthLargestElementInAnArray.java[tag=answer]
4247
----
48+
--
4349
50+
二刷::
51+
+
52+
--
4453
[{java_src_attr}]
4554
----
4655
include::{sourcedir}/_0215_KthLargestElementInAnArray_2.java[tag=answer]
4756
----
57+
--
58+
59+
三刷::
60+
+
61+
--
62+
[{java_src_attr}]
63+
----
64+
include::{sourcedir}/_0215_KthLargestElementInAnArray_3.java[tag=answer]
65+
----
66+
--
67+
====
4868
4969
== 参考资料
5070

logbook/202406.adoc

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -808,6 +808,11 @@
808808
|{doc_base_url}/0415-add-strings.adoc[题解]
809809
|✅ 双指针,从后向前,模拟加法进位。
810810

811+
|{counter:codes}
812+
|{leetcode_base_url}/kth-largest-element-in-an-array/[215. Kth Largest Element in an Array^]
813+
|{doc_base_url}/0215-kth-largest-element-in-an-array.adoc[题解]
814+
|❌ 快速查找,知道思路,代码却无从下手。
815+
811816
|===
812817

813818
截止目前,本轮练习一共完成 {codes} 道题。
Lines changed: 40 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,40 @@
1+
package com.diguage.algo.leetcode;
2+
3+
public class _0215_KthLargestElementInAnArray_3 {
4+
// tag::answer[]
5+
6+
/**
7+
* @author D瓜哥 · https://www.diguage.com
8+
* @since 2024-09-20 23:27:08
9+
*/
10+
public int findKthLargest(int[] nums, int k) {
11+
// 第 k 大,即为第 n - k 小
12+
return quickselect(nums, nums.length - k, 0, nums.length - 1);
13+
}
14+
15+
private int quickselect(int[] nums, int k, int left, int right) {
16+
if (left == right) {
17+
return nums[k];
18+
}
19+
int pivot = nums[left], l = left - 1, r = right + 1;
20+
while (l < r) {
21+
do {
22+
l++;
23+
} while (nums[l] < pivot);
24+
do {
25+
r--;
26+
} while (nums[r] > pivot);
27+
if (l < r) {
28+
int tmp = nums[l];
29+
nums[l] = nums[r];
30+
nums[r] = tmp;
31+
}
32+
}
33+
if (k <= r) {
34+
return quickselect(nums, k, left, r);
35+
} else {
36+
return quickselect(nums, k, r + 1, right);
37+
}
38+
}
39+
// end::answer[]
40+
}

0 commit comments

Comments
 (0)