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

  • 示例 1:
输入: [3,2,1,5,6,4] 和 k = 2
输出: 5
  • 示例 2:
输入: [3,2,3,1,2,4,5,5,6] 和 k = 4
输出: 4

说明:

你可以假设 k 总是有效的,且 1 ≤ k ≤ 数组的长度。

快排参考

#include <iostream>
#include <vector>
using namespace std;void quickSort(vector<int>& nums, int begin, int end);
void swap(int& first, int& second);
int getIndex(vector<int>& nums, int start, int end);
int main() {vector<int> nums = {1,23,67,24,87,45,25,7,68,58,45,34};quickSort(nums, 0, nums.size() - 1);for (const auto& x: nums) {cout << x << " ";}cout << endl;return 0;
}void quickSort(vector<int>& nums, int start, int end) {if (start < end) {int index = getIndex(nums, start, end);quickSort(nums, start, index-1);quickSort(nums, index+1, end);}
}int getIndex(vector<int>& nums, int start, int end) {int tmp = nums[start];int low = start;int high = end;while(low < high) {while(low < high && nums[high] >= tmp) {high--;}nums[low] = nums[high];while(low < high && nums[low] <= tmp) {low++;}nums[high] = nums[low];}nums[low] = tmp;return low;
}void swap(int& first, int& second) {int tmp = first;first = second;second = tmp;
}
  • 基于快排解决第K个最大元素
// 这个方法速度奇慢
class Solution {public:int findKthLargest(vector<int>& nums, int k) {int index = getIndex(nums, 0, nums.size()-1);while(index != k-1) {index = index > k-1 ? getIndex(nums, 0, index-1) : getIndex(nums, index+1, nums.size()-1);}return nums[index];}int getIndex(vector<int>& nums, int start, int end) {int low = start;int high = end;int tmp = nums[high];while(low < high) {while(low < high && nums[low] >= tmp) {low++;}nums[high] = nums[low];while(low < high && nums[high] <= tmp) {high--;}nums[low] = nums[high];}nums[low] = tmp;return low;}void swap(int& first, int& second) {int tmp = first;first = second;second = tmp;}
}
  • 优化,使用随机的index
class Solution {public:int quickSelect(vector<int>& a, int l, int r, int index) {int q = randomPartition(a, l, r);if (q == index) {return a[q];} else {return q < index ? quickSelect(a, q + 1, r, index) : quickSelect(a, l, q - 1, index);}}inline int randomPartition(vector<int>& a, int l, int r) {int i = rand() % (r - l + 1) + l;swap(a[i], a[r]);return partition(a, l, r);}inline int partition(vector<int>& a, int l, int r) {int x = a[r], i = l - 1;for (int j = l; j < r; ++j) {if (a[j] <= x) {swap(a[++i], a[j]);}}swap(a[i + 1], a[r]);return i + 1;}int findKthLargest(vector<int>& nums, int k) {srand(time(0));return quickSelect(nums, 0, nums.size() - 1, nums.size() - k);}
}

数组中第K个最大元素相关推荐

  1. python 数组中第k个最大元素

    数组中第k个最大元素 给定整数数组 nums 和整数 k,请返回数组中第 k 个最大的元素.请注意,你需要找的是数组排序后的第 k 个最大的元素,而不是第 k 个不同的元素.示例 1:输入: [3,2 ...

  2. Leetcode 215.数组中第k个最大元素 (每日一题 20210713)

    给定整数数组 nums 和整数 k,请返回数组中第 k 个最大的元素.请注意,你需要找的是数组排序后的第 k 个最大的元素,而不是第 k 个不同的元素.示例 1:输入: [3,2,1,5,6,4] 和 ...

  3. 怎么修改数组中指定元素_求数组中第K大的元素

    问题描述 求无序数组int[] nums中第K大的元素. 例如 输入:nums[] = {9,5,8},k = 2 输出:8 输入:nums[] = {3,1,2,4,5,5,6},k = 4 输出: ...

  4. LeetCode215:数组中第K个最大元素

    在未排序的数组中找到第 k 个最大的元素.请注意,你需要找的是数组排序后的第 k 个最大的元素,而不是第 k 个不同的元素. 示例:输入: [3,2,1,5,6,4] 和 k = 2 输出: 5 这个 ...

  5. 寻找数组中第K频繁的元素

    问题是:给你一个数组,求解出现次数第K多的元素.当然leetcode上的要求是算法复杂度不能大于O(N*logN). 首先这个问题我先是在leetcode上看到,当时想了两种做法,做到一半都觉得不是很 ...

  6. Leetcode--215. 数组中第K个最大元素

    在未排序的数组中找到第 k 个最大的元素.请注意,你需要找的是数组排序后的第 k 个最大的元素,而不是第 k 个不同的元素. 示例 1: 输入: [3,2,1,5,6,4] 和 k = 2 输出: 5 ...

  7. python第k序列元素查找_【python】寻找数组中第k大的元素

    题目链接:https://www.nowcoder.com/question/next?pid=13956292&qid=298692&tid=26431616 方法一: 最简单直接的 ...

  8. 寻找数组中第k大的元素

    这算是一道相当经典的算法题了: 在长度为N的乱序数组中寻找第k(n>=k)大的元素. (1)最简单直接的方法:先排序再找 最简单直接的想法是首先进行排序.假设元素的数量不大,比如才几千个,那就可 ...

  9. 经典算法题:寻找数组中第k大的元素

    这算是一道相当经典的算法题了: 在长度为N的乱序数组中寻找第k(n>=k)大的元素. 扩展思考:如何处理数组中的重复元素?比如,对于数组a={1,2,2,2,3,3,3},第二大的元素应该是3还 ...

最新文章

  1. JAVA 线上故障排查套路,从 CPU、磁盘、内存、网络到GC 一条龙!
  2. LintCode 最大正方形
  3. eclipse下tomcat添加部署Module,Web名称与项目名称不一致的解决方法
  4. .net core Entity Framework 与 EF Core
  5. C# Winform 带优美外观的UserControl控件GroupBox
  6. 腾讯web前端招聘条件汇总
  7. java接口的修饰符可以为,附架构师必备技术详解
  8. VS中Debug和Release版本的区别
  9. angular2系列之动画-路由转场动画
  10. Android 自定义View:教你轻松实现内存清理加速球的效果
  11. mysql语句怎么拼接字符串_MySQL执行拼接字符串语句实例
  12. 基于BOW模型的图像检索
  13. office2013 安装易用宝不成功
  14. pdf文档安全权限去除
  15. 旧项目归档:旅游年卡-旅游直通车-微信二级分销推广会员-汽车租赁-金币提现-司机乘务管理-景点线路乘车预约
  16. 报错:array_column函数未定义(原因:php版本问题)
  17. 我的世界(9)-服务器地图创建、管理(Multiverse插件)
  18. 如何将heic转成jpg或png格式?
  19. 60种数据可视化图表总结
  20. 【NOIP2017提高A组集训10.25】摘Galo (树形dp)

热门文章

  1. python 方程组 整数解_用Python语言求解线性整数方程组
  2. python类继承中构造方法_第8.3节 Python类的__init__方法深入剖析:构造方法与继承详解...
  3. 几道web前端练习题目
  4. Guava之RangeMap
  5. Linux系统下,MySQL以及禅道的安装/卸载
  6. link-cut-tree 简单介绍
  7. 【看番杂感】Clannad系列观后感(剧透慎入)
  8. SCREEN屏幕编程时候必须保证SCREN中词典的字段格式必须和数据表中字段的类型长度一致!...
  9. CAlayer层的属性
  10. 通过setTimeout来取消因大量计算造成的网页卡顿