首页 > 其他分享 >数组中的第k个最大元素(快速排序)

数组中的第k个最大元素(快速排序)

时间:2025-01-03 15:00:48浏览次数:1  
标签:nums 示例 int 元素 数组 排序

给定整数数组 nums 和整数 k,请返回数组中第 k 个最大的元素。

请注意,你需要找的是数组排序后的第 k 个最大的元素,而不是第 k 个不同的元素。

你必须设计并实现时间复杂度为 O(n) 的算法解决此问题。

 

示例 1:

输入: [3,2,1,5,6,4], k = 2
输出: 5

示例 2:

输入: [3,2,3,1,2,4,5,5,6], k = 4
输出: 4

 

class Solution {
public:
    //快速排序
    int quickselect(vector<int>& nums, int l,int r,int k){
        if(l==r)    return nums[k];
        int pivot = nums[l];
        int i = l-1,j=r+1;
        while(i<j){
            do i++; while (nums[i] < pivot);
            do j--; while (nums[j] > pivot);
            if(i<j)
                swap(nums[i],nums[j]);
        }
        if(k<=j){//说明寻找的值在左半边,就只快排左半边就行
            return quickselect(nums,l,j,k);
        }else{//否则快排右半边
            return quickselect(nums,j+1,r,k);
        }
    }
    int findKthLargest(vector<int>& nums, int k) {
        int n = nums.size();
        //寻找第k大元素,就是寻找第n-k小元素
        return quickselect(nums,0,n-1,n-k);
    }
};

 

标签:nums,示例,int,元素,数组,排序
From: https://www.cnblogs.com/yueshengd/p/18650121

相关文章

  • 多维数组、锯齿数组
    C++多维数组定义:多维数组可以看作是数组的数组,通过在定义时指定每个维度的大小来创建。下面以三维数组为例。访问:使用多个索引来访问数组中的元素,索引从0开始。销毁:对于栈上定义的多维数组,当作用域结束时会自动销毁;对于堆上动态分配的多维数组,需要手动释放内存。#include<......
  • 编程题-删除排序链表中的重复元素
    题目:给定一个已排序的链表的头 head , 删除所有重复的元素,使每个元素只出现一次 。返回已排序的链表 。解题由于给定的链表是排好序的,因此重复的元素在链表中出现的位置是连续的,因此我们只需要对链表进行一次遍历,就可以删除重复的元素。本题较为简单,笔者不做过多解释,......
  • [数据结构学习笔记3] 数组
    数组是用于存放一组数据,把这组数据存放在连续的空间里。通常有插入,删除,查找,访问等操作。举例:购物清单,初始状态:清单:牛奶->鸡蛋->奶油->火腿->果汁下标:0      1     2      3     4插入:1.插在末尾清单:牛奶->鸡蛋->奶......
  • 快速排序算法的 Java 实现与性能调优
    目录一、快速排序的基本原理二、快速排序的Java实现三、时间复杂度与空间复杂度四、总结引言排序是计算机科学中的基础问题之一,无论是在数据库查询、数据分析,还是在日常编程中,排序算法的选择都对性能有着重要的影响。快速排序(QuickSort)是最广泛使用的排序算法之一,......
  • 使用js写一个方法遍历输出页面中的所有元素
    在JavaScript中,你可以使用递归函数来遍历DOM树并输出所有元素。以下是一个简单的示例:functiontraverseAndLog(element){console.log(element);varchildren=element.children;for(vari=0;i<children.length;i++){traverseAndLog(children[i......
  • 后缀数组学习笔记
    \(\text{后缀数组学习笔记}\)一、定义对于下标从\(1\)开始,长度为\(n\)的字符串\(s\),我们定义后缀\(i\)表示字符串\(s[i,n]\)。对于后缀数组,我们定义\(sa(i)\)表示所有后缀按字典序排序后第\(i\)小的后缀的编号。例如对于字符串aabaaab,它有\(7\)个后缀,下边我们......
  • 【初阶数据结构与算法】排序算法总结篇(每个小节后面有源码)(直接插入、希尔、选择、堆
    文章目录一、直接插入排序二、希尔排序三、直接选择排序四、堆排序五、冒泡排序六、快速排序七、归并排序八、计数排序九、非递归快速排序十、非递归归并排序本篇内容将从稳定性与复杂度等角度分析排序算法,列出它们的特点、优点以及缺点,希望大家有所收获,如果想更加细......
  • 寻找两个正序数组的中位数(二分查找)
    给定两个大小分别为 m 和 n 的正序(从小到大)数组 nums1 和 nums2。请你找出并返回这两个正序数组的 中位数 。算法的时间复杂度应该为 O(log(m+n)) 。 示例1:输入:nums1=[1,3],nums2=[2]输出:2.00000解释:合并数组=[1,2,3],中位数2示例2:输入:nums1=[1......
  • 2025/1/2 【双指针法】LeetCode27.移除元素 【√】 ❗未完结❗
    27.移除元素-力扣(LeetCode)代码随想录数组的元素在内存地址中是连续的,不能单独删除数组中的某个元素,只能覆盖。Myanswer:快慢指针法classSolution:defremoveElement(self,nums:List[int],val:int)->int:n=len(nums)j=0forii......
  • 【Unity 环境插件】Autumn Valley - Level 丰富的自然元素,如秋季的树木、灌木、草地、
    AutumnValley-Level是一款专为Unity开发者设计的环境插件,旨在帮助快速创建美丽且具有沉浸感的秋季山谷景观。这个插件包含了丰富的自然元素,如秋季的树木、灌木、草地、岩石以及天气效果,可以在游戏中实现动态变化的秋季景观。无论是角色扮演游戏、冒险游戏、模拟类游戏,还......