【leetcode】215. 数组中的第K个最大元素(kth-largest-element-in-an-array)(分治)[中等]

2023-05-16

链接

https://leetcode-cn.com/problems/kth-largest-element-in-an-array/

耗时

解题:30 min
题解:18 min

题意

在数组中找到第 k 大的元素。

思路

快排的思想。

将第一个数作为基准数,将比基准数大的放在基准数的前面,将比基准数小的放在基准数的后面。然后看 k 是在基准数的前面还是后面,或者正好在基准数的位置。如果正好在基准数的位置,则已经得到了第 k 大元素,直接输出;如果是在基准数的前面或者后面,则缩小范围至基准数的前面或者后面,继续上述操作直至 k 正好是基准数的位置或者等缩小范围至范围内仅有一个元素。

最坏情况下是 O ( n 2 ) O(n^2) O(n2),期望是 O ( n ) O(n) O(n)

AC代码

class Solution {
public:
    int findKthLargest(vector<int>& nums, int k) {
        int n = nums.size();
        if(n == 1) return nums[0];
        int l = 0, r = n-1;
        int p = l, ans = -1;
        while(r-l+1 > 1) {
            while(l < r) {
                while(l < r && nums[r] <= nums[p]) r--;
                while(l < r && nums[l] >= nums[p]) l++;
                swap(nums[l], nums[r]);
            }
            swap(nums[p], nums[r]);
            if(k-1 == r) {
                break;
            }
            if(k-1 > r) {
                l = r+1;
                r = n-1;
                p = l;
            }
            else {
                l = 0;
                r = r;
                p = l;
            }
        }
        return nums[k-1];
    }
};
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

【leetcode】215. 数组中的第K个最大元素(kth-largest-element-in-an-array)(分治)[中等] 的相关文章

  • 二分查找(二)

    点名 点名 某班级 n 位同学的学号为 0 n 1 点名结果记录于升序数组 records 假定仅有一位同学缺席 请返回他的学号 二分法思路 判断数组的值和对应的下标是否相等 将数组分为两个区间 不相等区间的最左端 就是第缺席的同学的学号
  • 【每日一题】2397. 被列覆盖的最多行数-2024.1.4

    题目 2397 被列覆盖的最多行数 给你一个下标从 0 开始 大小为 m x n 的二进制矩阵 matrix 另给你一个整数 numSelect 表示你必须从 matrix 中选择的 不同 列的数量 如果一行中所有的 1 都被你选中的列所覆
  • 【LeetCode:114. 二叉树展开为链表 | 二叉树 + 递归】

    算法题 算法刷题专栏 面试必备算法 面试高频算法 越难的东西 越要努力坚持 因为它具有很高的价值 算法就是这样 作者简介 硕风和炜 CSDN Java领域新星创作者 保研 国家奖学金 高中学习JAVA 大学完善JAVA开发技术栈 面试刷题
  • Javascript 通过类或 id 获取 DOM 数组中的元素索引位置

    我的情况 var domElements document body getElementsByTagName 现在我想返回数组项键 数组中元素的位置 例如domElements 34 在数组中搜索元素id asd 我怎样才能实现这个目标
  • MongoDB C# - 获取不存在的元素的 BsonDocument

    所以我有一个 BsonDocument b 假设它有 FirstName LastName Age 您可以通过 b FirstName 等访问它 如果我尝试执行 b asdfasdf 当然不存在 它不会返回 null 而是会导致应用程序出错
  • HTML 元素过多会影响页面性能吗?

    我想知道两者之间是否有区别 1 10 000 个可见的表行 2 使用 display none 隐藏 10 000 个表格行 我想知道的是 如果页面上所有 10 000 行都可见 是否会导致页面滚动滞后 但如果我隐藏其中的 9000 个 这
  • 如何动态更改 Angular 中元素的 id?

    我在循环中有一个元素 我只想更改它的 id 以避免冲突 我做了一些搜索 但似乎找不到任何东西 div div index div div 问题是当我调用 ngOnInit 时document getElementById index 1 它
  • 返回 PHP 多维数组中最后一个数组的元素

    如何在 PHP 中动态显示最后一个数组中的元素 例如 Array 0 gt Array id gt 6 user id gt 8 category path gt Sport 1 gt Array id gt 8 user id gt 8
  • 如何从网页复制特定元素

    我的目标是从网页中获取特定的文本区域 想象一下 就好像您能够在页面上的任何位置绘制一个矩形 并且该矩形中的所有内容都将被复制到剪贴板中 我正在使用 FireBug 请随意建议其他解决方案 我已经搜索了插件或书签 但没有找到任何有用的东西 及
  • 删除 XML 节点

    我有一个 XML 文件 其中包含
  • 如何在Python中删除两个numpy数组的重复元素

    我有两个数组命名 u v 例如 u np array 1 0 2 0 2 0 3 0 4 0 v np array 10 0 21 0 18 0 30 0 40 0 a np array 100 0 210 0 220 0 300 0 40
  • JQuery 选择框和循环帮助

    谢谢阅读 我对 jQuery 有点陌生 我正在尝试制作一个可以包含在我所有网站中的脚本来解决一个总是让我发疯的问题 问题 带有长选项的选择框在 Internet Explorer 中会被截断 例如 这些选择框 http discoverfi
  • 如何检查可见 DOM 中是否存在元素?

    如何在不使用getElementById method 我已经设置了一个现场演示 http jsbin com apawi5 3以供参考 我还将在这里打印代码
  • 如何通过xpath获取元素的索引?

    我有下一个结构 div div class column aaa div div class column bbb div div class column jjj div div 我想知道是否有一种方法可以使用 XPath 并编写一些查询
  • jquery遍历新创建的元素

    我正在尝试在表中添加新行 并将它们保存到数据库中 首先 我使用 append 在表中追加行 tablename append tr td newly added row td tr 附加功能运行良好 我的页面显示了正确的结果 但是 我无法选
  • 对其他元素值的 XSD 限制

    是否可以在 XSD 文档中对其他元素值进行限制 例如 我有国家和州元素 如果国家 地区等于美国 那么我需要限制指定枚举的状态元素值 否则状态可以只是固定长度的字符串 当前 XSD 的示例 始终将状态限制为枚举
  • ElementTree 和 Element 有什么区别? (Python XML)

    from xml etree ElementTree import ElementTree Element SubElement dump elem Element 1 sub SubElement elem 2 tree ElementT
  • ElementNotVisibleException:消息:元素在 Robot Framework 中不可交互

    示例代码 div class modal footer div
  • 枚举类型的 JAXB 元素

    所以我知道如何创建枚举类型 但是当我为其设置元素类型时 元素字段将只是字符串类型 而不是枚举类型 如何在我的模式中创建枚举并让 JAXB 将其生成为 java 枚举类型 这就是我创建枚举类型和元素的方式
  • AngularJS 指令 - 设置多个指令元素的顺序(不是指令的优先级,而是元素的优先级)

    考虑带有指令 foo 的标记 div div div div div div 使 foo 按指定顺序而不是从上到下 3 1 2 运行的好方法是什么 我唯一能想到做的就是跟踪已运行的内容并在不按顺序的项目上返回 false 然后让 Angul

随机推荐