LeetCode in Python 215. Kth Largest Element in an Array (数组中的第k个最大元素)

数组中第k个最大元素,最简单的做法就是先给数组排序然后寻找倒数第k个最大元素,但为进一步降低算法的时间复杂度,可以采用快速查找的方法确定元素,即采用快速排序的“哨兵划分”和递归思想。

示例:

图1 输入输出示例图 

方法一:

排序后取元素

class Solution:
    def findKthLargest(self, nums, k):
        nums.sort()
        return nums[len(nums) - k]

方法二:

快速查找

class Solution:
    def findKthLargest(self, nums, k):
        def quickSelect(nums, k):
            small, equal, big = [], [], []
            pivot = random.choice(nums)
            for num in nums:
                if num < pivot:
                    small.append(num)
                elif num > pivot:
                    big.append(num)
                else:
                    equal.append(num)
            if k <= len(big):
                return quickSelect(big, k)
            elif k > len(nums) - len(small):
                return quickSelect(small, k + len(small) - len(nums))
            return pivot
        return quickSelect(nums, k)

解释:

1)pivot即为哨兵,将数组中>、<、=哨兵的元素存储到三个数组中,通过判断第k大元素落在哪个数组确定快速查找递归的下一个数组是谁。

2)着重注意对k的判断以及递归中的k值即可。

        if k <= len(big):

                return quickSelect(big, k)

        elif k > len(nums) - len(small):

                return quickSelect(small, k + len(small) - len(nums))

相关推荐

  1. 215数组K元素

    2024-04-14 17:54:03       49 阅读
  2. 力扣215. 数组K元素

    2024-04-14 17:54:03       63 阅读
  3. leetcode-215-数组K元素

    2024-04-14 17:54:03       42 阅读
  4. LeetCode215. 数组K元素

    2024-04-14 17:54:03       34 阅读
  5. LeetCode-热题100:215. 数组K元素

    2024-04-14 17:54:03       32 阅读
  6. Leetcode215_数组K元素

    2024-04-14 17:54:03       42 阅读

最近更新

  1. docker php8.1+nginx base 镜像 dockerfile 配置

    2024-04-14 17:54:03       70 阅读
  2. Could not load dynamic library ‘cudart64_100.dll‘

    2024-04-14 17:54:03       74 阅读
  3. 在Django里面运行非项目文件

    2024-04-14 17:54:03       62 阅读
  4. Python语言-面向对象

    2024-04-14 17:54:03       72 阅读

热门阅读

  1. PV和uv的区别

    2024-04-14 17:54:03       40 阅读
  2. 力扣经典150题第二十二题:Z 字形变换

    2024-04-14 17:54:03       33 阅读
  3. Qt Designer 控件箱中的控件介绍及布局比列分配

    2024-04-14 17:54:03       38 阅读
  4. 基于springboot的多维分类知识管理系统源码数据库

    2024-04-14 17:54:03       24 阅读
  5. 常用镜像地址:pip,yum,jar,linx镜像,apache系列等等

    2024-04-14 17:54:03       27 阅读
  6. okcc呼叫中心人工智能行业2024年市场发展分析

    2024-04-14 17:54:03       28 阅读
  7. 167. 两数之和 II - 输入有序数组

    2024-04-14 17:54:03       30 阅读
  8. Python网络请求:requests库7个功能实战

    2024-04-14 17:54:03       35 阅读
  9. Github 2024-04-10 开源项目日报Top10

    2024-04-14 17:54:03       32 阅读
  10. C#WPF的XAML中String回车换行

    2024-04-14 17:54:03       32 阅读
  11. 浅谈.版本管理工具

    2024-04-14 17:54:03       38 阅读
  12. vue3+vite+electron开发桌面端应用流程

    2024-04-14 17:54:03       34 阅读
  13. electron打包后的调试方式

    2024-04-14 17:54:03       30 阅读