Skip to content

Commit 4974ed3

Browse files
authored
Create Solution.cpp
优化过的partition
1 parent c28f2f0 commit 4974ed3

File tree

1 file changed

+44
-0
lines changed

1 file changed

+44
-0
lines changed
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,44 @@
1+
class Solution {
2+
public:
3+
int findKthLargest(vector<int>& nums, int k) {
4+
--k ;
5+
int ii = 0, jj = nums.size()-1 ;
6+
int i, j ;
7+
while (true)
8+
{
9+
i = ii, j = jj ;
10+
if (i + 63 < j)
11+
{
12+
const int mid = i + (j-i)/2 ;
13+
if (nums[j] >= nums[mid] && nums[j] <= nums[i]
14+
|| nums[j] <= nums[mid] && nums[j] >= nums[i])
15+
{
16+
swap(nums[i], nums[j]) ;
17+
}
18+
else if (nums[mid] >= nums[i] && nums[mid] <= nums[j]
19+
|| nums[mid] <= nums[i] && nums[mid] >= nums[j])
20+
{
21+
swap(nums[i], nums[mid]) ;
22+
}
23+
}
24+
while (i < j)
25+
{
26+
while (i < j && nums.at(i) >= nums.at(j))
27+
--j ;
28+
swap(nums[i], nums[j]) ;
29+
while (i < j && nums.at(i) >= nums.at(j))
30+
++i ;
31+
swap(nums[i], nums[j]) ;
32+
}
33+
34+
if (i > k)
35+
jj = i-1 ;
36+
else if (i < k)
37+
ii = i+1 ;
38+
else
39+
return nums[k] ;
40+
}
41+
42+
return nums.at(k) ;
43+
}
44+
};

0 commit comments

Comments
 (0)