当前位置: 首页 > news >正文

215. Kth Largest Element in an Array[堆|快排]

目录

题目描述

解法1:堆

解法2:快排


题目描述

Given an integer array nums and an integer k, return the kth largest element in the array.

Note that it is the kth largest element in the sorted order, not the kth distinct element.

You must solve it in O(n) time complexity.

Example 1:

Input: nums = [3,2,1,5,6,4], k = 2
Output: 5

Example 2:

Input: nums = [3,2,3,1,2,4,5,5,6], k = 4
Output: 4

Constraints:

  • 1 <= k <= nums.length <= 105
  • -104 <= nums[i] <= 104

解法1:堆

维护一个大小为K的小顶堆

python:

class Solution:
    def findKthLargest(self, nums: List[int], k: int) -> int:
        import heapq as hq
        heap = nums[:k]
        hq.heapify(heap)
        for t in nums[k:]:
            if t > heap[0]:
                hq.heapreplace(heap, t)
        return heap[0]

c++:

class Solution {
public:
    int findKthLargest(vector<int>& nums, int k) {
        priority_queue<int> q(nums.begin(), nums.end());
        for (int i = 0; i < k - 1; i++) {
            q.pop();
        }
        return q.top();
    }
};

解法2:快排

快排思想是根据某值将数组分成两部分,左边的均小于该数,右边的均大于该数

这里可以按照从大到小排序,找到应该放在第k-1位置的数即可

python:

class Solution:
    def partition(self, nums, l, r, k):
        if l >= r:
            return
        cur = nums[l]
        i = l
        j = r
        while l < r:
            while l < r and cur > nums[r]:
                r -= 1
            if l < r:
                nums[l] = nums[r]
                l += 1
            while l < r and nums[l] > cur:
                l += 1
            if l < r:
                nums[r] = nums[l]
                r -= 1
        nums[l] = cur
        if l == k-1:
            return
        elif l < k-1:
            self.partition(nums, l + 1, j, k)
        else:
            self.partition(nums, i, l - 1, k)
        

    def findKthLargest(self, nums: List[int], k: int) -> int:
        self.partition(nums, 0, len(nums) - 1, k)
        return nums[k-1]

相关文章:

  • wordpress首页不显示页面/佛山网站建设制作公司
  • 目前做哪个网站致富/营销计划怎么写
  • html5做的网站/免费建站的网站有哪些
  • 网站建设公司的前景/公司网络营销策略
  • 网站建设宗旨是什么/网站维护需要学什么
  • wordpress 文章 相对路径/电商广告网络推广
  • 鸿翼档案,将非结构化数据治理能力应用于档案管理的先行者
  • 老板,明年我用Seata搞定分布式事务管理的规范化建设 | 中篇
  • 快速入门Spring MVC 一篇就够了
  • 【知识图谱】什么是知识图谱?知识图谱的应用。知识图谱的数据模型(三元组 模型、属性图模型)。西游记中的知识图谱。
  • mybatis 中@SelectProvider注解的使用
  • QT qt 3d 绘图
  • SpringCloud Alibaba | 网关(三) : SpringCloudGateway 过滤器获取application/json中body数据
  • 李沐精读论文:Swin transformer: Hierarchical vision transformer using shifted windows
  • R语言应用xgboost进行机器学习(1)
  • 2023年天津理工大学中环信息学院专业课考试具体安排
  • URLLC关键技术和网络适应性分析
  • 【圣诞节特辑】爱心代码(程序员的浪漫plus+)-李峋