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

题目:


解法一、优先级队列

代码

#include<queue>
class Solution {
public:int findKthLargest(vector<int>& nums, int k){//使用优先级队列直接秒杀!priority_queue<int ,vector<int>,less<int>> q;for(int i=0;i<nums.size();i++){q.push(nums[i]);}int n=q.size();while(--k){q.pop();}return q.top();}
};

思路:

因为是使用的优先级队列,所以要求第K个大的元素,只需要将数组POP (k-1)次,然后再取队列的队头元素即可!!

解法二:自己手撕堆结构,进行排序,然后取第k个元素即可!

其中优先级队列利用的其实就是堆结构!建堆解决此问题的原理就是和优先级队列是一样的!算法思路和优先级队列一样,这里仅仅给出代码参考即可!不会的可以评论区继续讨论!

#include<queue>
class Solution{
public:void adjustdown(vector<int>&arr,int n,int i)
{int child=i*2+1;while(child<n){//建小堆!if(child+1<n &&arr[child]>arr[child+1]){child++;}if(arr[child]<arr[i]){swap(arr[child],arr[i]);i=child;child=i*2+1;}else{break;}}
}int findKthLargest(vector<int>& nums, int k){//首先进行建堆!int n=nums.size();for(int i=(n-1-1)/2;i>=0;i--){adjustdown(nums,n,i);}int end = n - 1;while (end >0){swap(nums[0], nums[end]);adjustdown(nums, end, 0);--end;}return nums[k-1];}
};

解法三、基于快排的快速选择!

代码:

class Solution {
public:int getkey(vector<int>&nums,int left,int right){int r=rand();return nums[r%(right-left+1)+left];}int qsort(vector<int>&nums,int left,int right,int k){int l=-1,r=right+1;int i=0;int key=getkey(nums,left,right);while(i<r){if(nums[i]<key){swap(nums[++l],nums[i++]);}else if(nums[i]>key){swap(nums[--r],nums[i]);}else{i++;}}int a=l-left+1;int b=r-l-1;int c=right-r+1;if(c>=k){return qsort(nums,r,right,k);}else if(b+c>=k){return key;}else{return qsort(nums,left,l,k-b-c);}return 0;}int findKthLargest(vector<int>& nums, int k) {srand(time(NULL));//基于快排的优化求topk问题!int n=nums.size()-1;int s=qsort(nums,0,n,k);return s; }
};

思路:其中此思路是利用快排的思想,将整个数组划分为三大块,分别为大于key  等于key和小于key这三大块!然后求出每块的个数,再与K进行比较,来判断是否继续进行递归寻找,此方法的快速之处在于:一旦确定了在哪一块,直接就可以将其中两块抛弃掉!大大降低了寻找时间!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/191399.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

HttpClient

HttpClient作用&#xff1a; 发送HTTP请求 接收响应数据 HttpClient应用场景&#xff1a; 使用扫描支付、查看地图、获取验证码、查看天气等功能,需要发起请求的时候 实现HttpClient HttpClient的maven坐标&#xff1a; <dependency><groupId>org.apache.httpco…

链表数组插入排序

InsertSort 插入排序算法&#xff0c;比如打扑克牌的算法时&#xff0c;按照从左到右&#xff0c;找到对应的位置插入排序 最重要的是位置移动 找到对应位置值 #include "iostream" #include "bits/stdc.h"using namespace std;void sort(vector<in…

关于微信公众号授权的几件事

背景 项目需要使用微信公众号发消息&#xff0c;然后就来接入这个微信授权啦&#xff0c;微信公众号发消息前提是还需要用户先关注公众号~ 微信授权是有点恶心的&#xff0c;真的真的需要先配置好环境&#xff0c;开发的话目前是可以使用测试号申请公众号使用测试号的appid~ …

【云备份】业务处理

文章目录 1. 业务处理作用功能 2. 代码框架编写构造函数UpLoad ——文件上传请求ListShow —— 展示页面请求处理实现Download —— 下载请求的处理实现断点续传实现 1. 业务处理 作用 业务处理模块是对客户端的业务请求进行处理 功能 1.文件上传请求&#xff1a;备份客户端…

lv11 嵌入式开发 中断处理 15

前言&#xff1a;中断属于7种异常的1种&#xff0c;这节主要讲CPU接收到中断之后怎么处理&#xff0c;回顾之前的知识。 目录 1 异常 1.1 概念 1.2 异常处理机制 1.3 ARM异常源 1.4 异常模式 1.5 ARM异常响应 1.6 异常向量表 1.7 异常返回 ​编辑 1.8 IRQ异常举例 …

git 中的stash和alias的应用

1.Stash的应用 暂存当前修改&#xff1a; git stash save "message"&#xff1a;将当前修改保存到一个新的 stash 中&#xff0c;并可以为这个 stash 添加一条描述信息。 查看已保存的 stash 列表&#xff1a; git stash list&#xff1a;列出所有已保存的 stash…

scrapyd及gerapy的使用及docker-compse部署

一、scrapyd的介绍 scrapyd是一个用于部署和运行scrapy爬虫的程序&#xff0c;它允许你通过JSON API(也即是web api)来部署爬虫项目和控制爬虫运行&#xff0c;scrapyd是一个守护进程&#xff0c;监听爬虫的运行和请求&#xff0c;然后启动进程来执行它们 scrapyd的安装 scr…

从“芯”到云,看亚马逊云科技如何让未来“平等”发生

文章目录 业界最全面算力选择&#xff0c;有效解决多样性需求多年自研芯片积累&#xff0c;带来性能与性价比双重优势全球基础设施与独特的业务模式&#xff0c;让创新不受限 “科幻作家威廉吉布森说‘未来已至&#xff0c;只是还没有均匀分布’。”2023年6月底&#xff0c;当亚…

5个被忽视的Linux实用命令

大家好&#xff0c;提到Linux&#xff0c;一些用户会认为这是一个复杂的操作系统&#xff0c;因为所有工作都是通过终端使用命令来完成的。但是当用户开始在Linux上工作时&#xff0c;就会喜欢上这些命令&#xff0c;在Linux上工作一段时间后&#xff0c;用户会开始更喜欢Linux…

抖音短视频账号矩阵系统开发新规则

一、抖音官方平台开发新规&#xff1a; 1.代发布管理应用api接口无法在做新的应用申请 仅针对企事业单位开放&#xff0c;目前要想开发新的抖音矩阵系统&#xff0c;就需要在原有的技术算法上进行新一步的调整。 能力介绍 网站应用开发者可以申请开通【代替用户发布内容到抖…

【限时免费】20天拿下华为OD笔试【DFS/BFS】2023B-Linux发行版的数量【欧弟算法】全网注释最详细分类最全的华为OD真题题解

文章目录 题目描述与示例题目描述输入描述输出描述说明示例一输入输出说明 解题思路代码解法一&#xff1a;BFS解法二&#xff1a;DFS时空复杂度 题目描述与示例 题目描述 Linux 操作系统有多个发行版&#xff0c;distrowatch.com 提供了各个发行版的资料。这些发行版互相存在…

Unity Meta Quest 一体机开发(八):【手势追踪】实现 Hand Grab 扔物体功能

文章目录 &#x1f4d5;教程说明&#x1f4d5;设置刚体和碰撞体&#x1f4d5;给物体添加 Physics Grabbable 脚本&#x1f4d5;给手部添加 Hand Velocity Calculator 物体 此教程相关的详细教案&#xff0c;文档&#xff0c;思维导图和工程文件会放入 Seed XR 社区。这是一个高…

【实战教程】PHP如何轻松对接腾讯云COS,实现文件上传下载?

腾讯云提供了一系列丰富的云服务&#xff0c;其中包括对象存储&#xff08;Cloud Object Storage&#xff0c;简称COS&#xff09;&#xff0c;它是一种高可靠性、可扩展性强的云存储服务。本文将介绍如何使用PHP对接腾讯云COS存储服务&#xff0c;实现文件的上传和下载功能。 …

【Unity入门】声音组件AudioSource简介及实现声音的近大远小

AudioSource组件 将需要播放声音的物体挂载Audio Listener组件&#xff0c;实现声音的播放 AudioSource组件属性 &#xff08;1&#xff09;AudioClip&#xff08;音频剪辑&#xff09;&#xff1a;指定播放的音频文件。 &#xff08;2&#xff09;Output&#xff08;音频输…

hbase Master is initializing

问题如下&#xff1a; ERROR: org.apache.hadoop.hbase.PleaseHoldException: Master is initializing ERROR: org.apache.hadoop.hbase.PleaseHoldException: Master is initializingat org.apache.hadoop.hbase.master.HMaster.checkInitialized(HMaster.java:2452)at org.…

(CS61A)Homework 1: Variables Functions, Control

刚开始的写CS61A作业&#xff1a; OK程序都不知道在哪&#xff0c;自己开个源文件写&#xff08;后来才发现要在网站作业下载&#xff09; Q2: A Plus Abs B Fill in the blanks in the following function for adding a to the absolute value of b, without calling abs. …

栈实现队列,力扣

题目地址&#xff1a; 232. 用栈实现队列 - 力扣&#xff08;LeetCode&#xff09; 难度&#xff1a;简单 今天刷栈实现队列&#xff0c;大家有兴趣可以点上看看题目要求&#xff0c;试着做一下。 题目&#xff1a; 请你仅使用两个栈实现先入先出队列。队列应当支持一般队列支…

一篇带你串通数据结构

文章目录 导论数据结构的定义数据结构在计算机科学中的重要性为什么学习数据结构很重要 1、基本概念1.1、数据、数据元素和数据项的概念1.2、数据对象与数据结构的关系1.3、逻辑结构与物理结构 2、线性结构2.1、数组2.2、链表2.3、栈2.4、队列 3、非线性结构3.1、树3.2、图 4、…

prometheus|云原生|kubernetes内部安装prometheus

架构说明&#xff1a; prometheus是云原生系统内的事实上的监控标准&#xff0c;而kubernetes集群内部自然还是需要就地取材的部署prometheus服务了 那么&#xff0c;prometheus-server部署的方式其实是非常多的&#xff0c;比如&#xff0c;kubesphere集成方式&#xff0c;h…

Linux ____04、文件内容查看(命令),网络配置(命令),软硬链接(命令)

文件内容查看&#xff0c;软硬链接 一、文件内容查看1、cat 由第一行开始显示文件内容&#xff0c;用来读文章&#xff0c;或者读取配置文件啊&#xff0c;都使用cat名2、tac 从最后一行开始显示&#xff0c;可以看出 tac 是 cat 的倒着写&#xff01;3、显示的时候&#xff0c…