题目
思路
双指针,partition,递归
代码
class Solution:
# @param k & A a integer and an array
# @return ans a integer
def partition(self, k, A, left, right):
pivot = left + (right - left) // 2
num = A[pivot]
i = left; j = right
while i <= j:
while i <= j and A[i] > num:
i += 1
while i <= j and A[j] < num:
j -= 1
if i <= j:
A[i], A[j] = A[j], A[i]
i += 1
j -= 1
if k <= j: return self.partition(k, A, left, j)
if k >= i: return self.partition(k, A, i, right)
return A[k]
def kthLargestElement(self, k, A):
return self.partition(k - 1, A, 0, len(A) - 1)