文章目录

  • 一、题目
    • 1、题目描述
    • 2、基础框架
    • 3、原题链接
  • 二、解题报告
    • 1、思路分析
    • 2、时间复杂度
    • 3、代码详解
  • 三、本题小知识
  • 四、加群须知

一、题目

1、题目描述

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

2、基础框架

  • C语言 版本给出的基础框架代码如下:
int findKthLargest(int* nums, int numsSize, int k){}

3、原题链接

LeetCode 215. 数组中的第K个最大元素
剑指 Offer II 076. 数组中的第 k 大的数字

二、解题报告

1、思路分析

  1)这题的数据是有范围的,范围为 [ − 1 0 4 , 1 0 4 ] [-10^4, 10^4] [−104,104],所以我们直接将数组加上 1 0 4 10^4 104 以后就可以映射到数组下标了,不需要散列哈希了;
  2)逆序遍历哈希数组,找到第 k k k 个非空的就是答案了;

2、时间复杂度

  由于需要把所有元素都遍历一遍,所以时间复杂度为 O ( n ) O(n) O(n)。

3、代码详解


#define base 10005
#define maxn base*2
int Hash[maxn];int findKthLargest(int* nums, int numsSize, int k){int i;memset(Hash, 0, sizeof(Hash));for(i = 0; i < numsSize; ++i) {++ Hash[ nums[i] + base ];         // (1)}for(i = maxn-1; i >= 0; --i) {while(Hash[i]) {                   // (2)--Hash[i];--k;if(k == 0) {                   // (3)return i - base;           // (4)}  }}return -1;
}
  • ( 1 ) (1) (1) 增加偏移量 base 后进行哈希计数
  • ( 2 ) (2) (2) 如果检测到一个数,则进行计数器减一,并且递减 k k k 的值
  • ( 3 ) (3) (3) 当 k k k 减到 0 的时候就找到了对应的数;
  • ( 4 ) (4) (4) 返回的时候,需要减去之前加上的偏移值;

三、本题小知识

  当给定数字出现负数的时候,可以先看下数据范围,如果范围不是很大,直接加上偏移就可以映射到数组下标了,不需要用传统的散列哈希,这样效率会更高。


四、加群须知

  相信看我文章的大多数都是「 大学生 」,能上大学的都是「 精英 」,那么我们自然要「 精益求精 」,如果你还是「 大一 」,那么太好了,你拥有大把时间,当然你可以选择「 刷剧 」,然而,「 学好算法 」,三年后的你自然「 不能同日而语 」
  那么这里,我整理了「 几十个基础算法 」 的分类,点击开启:

⭐算法入门⭐《哈希表》中等05 —— LeetCode 215. 数组中的第K个最大元素相关推荐

  1. 力扣(LeetCode)215. 数组中的第K个最大元素(C语言)

    一.环境说明 本文是 LeetCode 215题 : 数组中的第K个最大元素,使用c语言实现. 快速选择.查找无序数组的利器! 测试环境:Visual Studio 2019. 二.代码展示 void ...

  2. ⭐算法入门⭐《堆》中等02 —— LeetCode 703. 数据流中的第 K 大元素

    文章目录 一.题目 1.题目描述 2.基础框架 3.原题链接 二.解题报告 1.思路分析 2.时间复杂度 3.代码详解 三.本题小知识 四.加群须知 一.题目 1.题目描述   设计一个找到数据流中第 ...

  3. vector删除第i个元素_[LeetCode] 215. 数组中的第K个最大元素

    题目链接:https://leetcode-cn.com/problems/kth-largest-element-in-an-array/) 题目描述: 在未排序的数组中找到第 k 个最大的元素.请 ...

  4. LeetCode 215. 数组中的第K个最大元素(快速排序)

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

  5. leetcode 215.数组中的第K个最大元素

    难度:中等 频率:250 ** 题目:给定整数数组nums和整数k,清返回数组中第K个最大的元素. 清注意你要找的是数组排序后的第K个最大的元素,而不是第K个不同的元素. ** ** 题目类型: 经典 ...

  6. 2022-1-27 Leetcode 215.数组中的第 k 个最大元素

    借助 STL class Solution {public:int findKthLargest(vector<int>& nums, int k) {sort(nums.begi ...

  7. Leetcode 215. 数组中的第K个最大元素 解题思路及C++实现

    解题思路: 用最小堆来存储k个最大的值,遍历一次nums容器,然后返回最小堆中最上面节点的值即可. C++中使用priority_queue来实现最小堆.代码如下: class Solution { ...

  8. LeetCode 215 数组中的第K个最大元素

    题目描述 在未排序的数组中找到第 k 个最大的元素.请注意,你需要找的是数组排序后的第 k 个最大 的元素,而不是第 k 个不同的元素. 题解 快速排序 代码 class Solution { pub ...

  9. 【LeetCode】【HOT】215. 数组中的第K个最大元素(优先队列)

    [LeetCode][HOT]215. 数组中的第K个最大元素 文章目录 [LeetCode][HOT]215. 数组中的第K个最大元素 package hot;import java.util.Co ...

最新文章

  1. 空缺十年,百度再任命CTO!加盟十年,王海峰现集AI大权为一身
  2. java -jar 和 -cp详解
  3. 牛客题霸 [ 判断一棵二叉树是否为搜索二叉树和完全二叉树] C++题解/答案
  4. IOHelper(自制常用的输入输出的帮助类)
  5. 20175204 张湲祯 2018-2019-2《Java程序设计》第三周学习总结
  6. 设计模式是什么鬼(原型)
  7. 20165221 JAVA第四周学习心得
  8. 设置模糊阴影_制作带模糊效果的PPT首页
  9. qcustomplot 游标吸附_QCustomplot使用分享(九) 绘制图表-多功能游标
  10. 干货丨如何从零构建一个数据可视化项目?
  11. 计算机telnet命令大全,telnet 命令使用方法详解,telnet命令怎么用
  12. sip协议详解(三)
  13. 比较PAFF和MBAFF
  14. MITO-ID 线粒体膜电位检测试剂盒的作用机制和应用
  15. About all the awsome websites
  16. 厦门大学计算机考研2020分数线,厦门大学2020考研分数线已公布
  17. Ubuntu下安装日语输入法
  18. python禅语_42:对象、类、以及从属关系
  19. 仓库摆放示意图_仓库合理堆放标准,货物入库摆放规范
  20. 【获奖公布】“我的2016”主题征文活动

热门文章

  1. 傅里叶变换分析A股大盘周期
  2. 大一新生计算机考试理论知识,大一新生计算机考试.doc
  3. python 单例模式浅析
  4. 【Go·编辑器IDE】GoLand集成开发环境安装及使用教程
  5. 动手学深度学习:Fashion-MNIST数据集下载失败解决方法
  6. facebook开源动画pop
  7. Wireless工具移植之RTL8188eus驱动移植
  8. 简历照片底色要求是什么?怎么修改证件照底色?
  9. python基础(字符串)
  10. 【引语练习题】一般疑问句转化为间接引语