蓝桥14

一数据中第K个最大元素

蓝桥14_第1张图片

  • 快排
    
  • 每次迭代判断第一个数有多少数比它小它就是第几位,直接安插在固定位置
  • 每次迭代都能令一个数到达最终位置
  • 复杂度O(n)
class Solution:
    def findKthLargest(self, nums: List[int], k: int) -> int:
        # 快排
        def quicksort(arr): # 参数不必加self
            if len(arr) < 2:
                return arr
            central_ele = arr[0]
            smaller_sub_arr = [e for e in arr[1:] if e <= central_ele] # ‘=’不要丢了
            larger_sub_arr = [e for e in arr[1:] if e > central_ele]
            return quicksort( smaller_sub_arr) + [central_ele] + quicksort(larger_sub_arr)
        sorted_nums = quicksort(nums)
        # 返回倒数第k个数
        return sorted_nums[-k]

二存在重复元素

蓝桥14_第2张图片

  • 判断set后长度是否变化
class Solution:
    def containsDuplicate(self, nums: List[int]) -> bool:
        return len(nums)!=len(set(nums))

三二叉搜索数中第K个最小元素

蓝桥14_第3张图片

  • 二叉树遍历方法有三种,前序,中序和后序
  • 因为这是二叉搜索数,大小时按左中右排序的,所以我们使用中序遍历
  • 遍历中止条件时这个数是第K小的,我们找到一个最小的就去除,k-1,到最后k=0即可
class Solution:
    def kthSmallest(self, root: TreeNode, k: int) -> int:
        stack = []
        while True:
            while root:
                stack.append(root)
                root = root.left
            root = stack.pop()
            k -= 1
            if k == 0: return root.val
            root = root.right

你可能感兴趣的:(蓝桥14)