在未排序的数组中找到第 k 个最大的元素。请注意,你需要找的是数组排序后的第 k 个最大的元素,而不是第 k 个不同的元素。
示例 1:
输入: [3,2,1,5,6,4] 和 k = 2

# -*- coding:utf-8 -*-


def find_k_max(a_list, k):
    left = 0
    right = len(a_list)-1

    while left <= right:
        idx = part(a_list, left, right)
        if idx == k:
            return a_list[k]
        elif idx < k:
            left = idx+1
        else:
            right = idx-1

    return -1


def part(nums, left, right):
    base = nums[left]
    i, j = left, right
    while i < j:
        while i < j and nums[j] >= base:
            j -= 1
        if i < j:
            nums[i] = nums[j]

        while i < j and nums[i] <= base:
            i +=1

        if i < j:
            nums[j] = nums[i]

    nums[i] = base

    return i