题目

    1. 数组中的第k个最大元素

    思路
    用快速排序的基本思想。
    在数组中随机选择一个数字pivot,然后调整数组中数字的顺序,使得比选中的数字小的数字都排在它左边,比选中的数字大的数字都排在它的右边。

    • 如果选中的数字的下标刚好等于target = length-k,则这个数字就是第k大的;
    • 如果选中的数字的下标刚好小于target,则第k大的数字位于这个数字右边;
    • 如果选中的数字的下标刚好大于target,则第k大的数字位于这个数字左边。
    1. class Solution:
    2. def findKthLargest(self, nums: List[int], k: int) -> int:
    3. def __partition(nums, left, right):
    4. pivot = nums[left]
    5. j = left
    6. for i in range(left + 1, right + 1):
    7. if nums[i] < pivot:
    8. j += 1
    9. nums[i], nums[j] = nums[j], nums[i]
    10. nums[left], nums[j] = nums[j], nums[left]
    11. return j
    12. def __check_invalid_array(nums):
    13. return True if len(nums) <= 1 else False
    14. if __check_invalid_array(nums):
    15. return nums[0]
    16. target = len(nums) - k
    17. start = 0
    18. end = len(nums) - 1
    19. index = __partition(nums, start, end)
    20. while(index != target):
    21. if index > target:
    22. end = index - 1
    23. index = __partition(nums, start, end)
    24. else:
    25. start = index + 1
    26. index = __partition(nums, start, end)
    27. result = nums[target]
    28. return result
    • 其他思路待整理