Leetcode刷题_堆相关_c++版

news2025/3/10 15:05:52

(1)215数组中的第k个最大元素–中等

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

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

你必须设计并实现时间复杂度为 O(n) 的算法解决此问题。
在这里插入图片描述

class Solution {
public:
    int findKthLargest(vector<int>& nums, int k) {
        //维护一个长度为k的堆,堆顶元素即为第k大的数
        // priority_queue<int>  //默认降序队列,大顶堆
        // priority_queue<int,vector<int>,less<int>> //降序队列,大顶堆
        // priority_queue<int,vector<int>,greater<int>>  //升序队列,小顶堆
        priority_queue<int, vector<int>, greater<int>> Q;
        for(int i = 0; i< nums.size(); i++){
            //前k个直接进入堆
            if(i<k) Q.push(nums[i]);
            //k+1个开始,维护最大的k个在堆中
            else if(nums[i] > Q.top()) {
                Q.pop();
                Q.push(nums[i]);
            }
        }return Q.top();
    }
};

在这里插入图片描述

(2)295数据流的中位数–困难

中位数是有序整数列表中的中间值。如果列表的大小是偶数,则没有中间值,中位数是两个中间值的平均值。

例如 arr = [2,3,4] 的中位数是 3 。
例如 arr = [2,3] 的中位数是 (2 + 3) / 2 = 2.5 。
实现 MedianFinder 类:

MedianFinder() 初始化 MedianFinder 对象。

void addNum(int num) 将数据流中的整数 num 添加到数据结构中。

double findMedian() 返回到目前为止所有元素的中位数。与实际答案相差 10-5 以内的答案将被接受。

在这里插入图片描述

class MedianFinder {

private:
    //维护两个堆
    //最大堆,较小的一半元素,堆顶为较大元素中的最小值
    priority_queue<int, vector<int>, less<int>> big_queue;
    //最小堆,放较大的一半元素,堆顶为较小元素中的最大值
    priority_queue<int, vector<int>, greater<int>> small_queue;

public:
    MedianFinder() {
        
    }
    
    void addNum(int num) {
        //如果两堆数量相等,选择相应的放即可
        if(big_queue.size() == small_queue.size()){
            if(big_queue.size() == 0) big_queue.push(num);
            else if(num <= big_queue.top()) big_queue.push(num);
            else small_queue.push(num);
        }
        //如果最大堆较多
        else if(big_queue.size()> small_queue.size()){
            //新元素属于较小的一半,需要插入最大堆
            if(num < big_queue.top()){
                //将最大堆堆顶移到最小堆中来
                small_queue.push(big_queue.top());
                big_queue.pop();
                //最大堆push进新元素
                big_queue.push(num);
            }
            //新元素属于较大的一半,需要插入最小堆
            else small_queue.push(num);
        }
        //如果最小堆较多
        else{
            //新元素属于较大的一半,需要插入最小堆
            if(num > small_queue.top()){
                //将最小堆堆顶移到最大堆中来
                big_queue.push(small_queue.top());
                small_queue.pop();
                //最小堆push进新元素
                small_queue.push(num);
            }
            //新元素属于较小的一半,需要插入最大堆
            else big_queue.push(num);
        }
    }
    
    double findMedian() {
        if(big_queue.size() == 0 && small_queue.size() == 0) return NULL;
        else if (big_queue.size() == small_queue.size()) return (big_queue.top()+small_queue.top())/2.0;
        else return (big_queue.size()>small_queue.size()?big_queue.top():small_queue.top());

    }
};

/**
 * Your MedianFinder object will be instantiated and called as such:
 * MedianFinder* obj = new MedianFinder();
 * obj->addNum(num);
 * double param_2 = obj->findMedian();
 */

在这里插入图片描述

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

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

相关文章

<C++>类和对象-中

目录 前言 一、类的6个默认成员函数 二、构造函数 2.1 概念 2.2 特性 三、析构函数 1. 概念 2. 特性 四、拷贝构造函数 1. 概念 2. 特征 五、赋值运算符重载 1. 运算符重载 2. 赋值运算符重载 六、实现一个完整的日期类 Date.h Date.cpp 总结 前言 上一节&#xff0c;我们…

【C语言】每日一题(半月斩)——day1

目录 &#x1f60a;前言 一.选择题 1.执行下面程序&#xff0c;正确的输出是&#xff08;c&#xff09; 2.以下不正确的定义语句是&#xff08; &#xff09; 3.test.c 文件中包括如下语句&#xff0c;文件中定义的四个变量中&#xff0c;是指针类型的变量为【多选】&a…

Acwing 2816. 判断子序列

Acwing 2816. 判断子序列 题目描述代码展示 题目描述 代码展示 #include<iostream>using namespace std;const int N 1e5 10;int a[N], b[N];int main() {int n , m;cin >> n >> m;for (int i 0; i < n; i ) scanf("%d", &a[i]);for (…

使用IO操作文件

一、File类操作文件或目录 1.File操作文件或目录 java.io.File 类是文件和目录 路径名 的抽象表示&#xff0c;主要用于文件和目录的创建、查找和删除等操作。 Java虚拟机中的一个 File 实例表示一个路径&#xff0c;这个路径可能对应一个文件或一个目录。 File 类的实例所表…

论文阅读 - Outlier detection in social networks leveraging community structure

目录 摘要 1. Introduction 2. Related works 3. Preliminaries 3.1. 模块化度量 3.2. Classes of outliers 3.2.1. 点异常 3.2.2. Contextual anomalies 3.2.3. Collective anomalies 3.3. Problem definition 3.4. Outliers score 4. Methodology 4.1. Proposed appr…

ESP32编译出现Cannot establish a connection to the component registry.报错

前言 &#xff08;1&#xff09;在对ESP32开发使用的时候&#xff0c;很容易踩坑&#xff0c;但是总是找不到问题所在。很多时候只能去外网查资料&#xff0c;语言不通&#xff0c;而且有墙特别的难受。就算能够找到乐鑫的工作人员询问&#xff0c;也整个过程也感觉有些许麻烦。…

Vue2电商前台项目——完成Detail详情页模块业务

Vue2电商前台项目——完成Detail详情页模块业务 Vue基础知识点击此处——Vue.js 文章目录 Vue2电商前台项目——完成Detail详情页模块业务一、项目开发步骤二、配置路由规则滚动行为1、配置路由规则2、滚动行为 三、请求详情页数据并展示数据1、写接口2、写Vuex仓库3、派发acti…

ESP32S3的ESP_LOGx()控制台输出详细介绍

前言 &#xff08;1&#xff09;接触一款新的芯片&#xff0c;第一步要么是点灯&#xff0c;要么是进行串口的输出。现在我将介绍如何快速的利用ESP32S3进行控制台的日志输出。 &#xff08;2&#xff09;对于ESP32进行日志输出还是相对简单的&#xff0c;不像其他芯片需要配置…

三维模型3DTile格式轻量化压缩的遇到常见问题与处理方法分析

三维模型3DTile格式轻量化压缩的遇到常见问题与处理方法分析 三维模型的轻量化压缩是一项技术挑战&#xff0c;特别是在处理复杂的3DTile格式时。下面列举了一些处理过程中可能遇到的常见问题以及相应的处理方法&#xff1a; 模型精度损失&#xff1a;在进行压缩处理时&#x…

C语言入门Day_19 初识函数

目录 1.函数的定义 2.函数的调用 3.易错点 4.思维导图 前言&#xff1a; printf()我们已经很熟悉了&#xff0c;它有一个特定的功能&#xff0c;就是在屏幕上输出一行文字。之前的课程我们都称呼printf()为一个功能&#xff0c;实际上ta在编程中有个特定的名字——函数。 …

IO和进程day07(IPC、管道、信号)

今日任务 1.代码&#xff08;一次只能发一次消息&#xff0c;不然会存在一些小问题&#xff0c;在接受消息之后会立刻输出上次的第二次发送的消息&#xff09; read.c文件&#xff08;先读取消息&#xff09; #include <stdio.h> #include <string.h> #include &…

org.apache.ibatis.binding.BindingException: Invalid bound statement

在学习黑马头条遇到的关于使用mapper执行方法出现的错误 完整报错信息为&#xff1a;org.apache.ibatis.binding.BindingException: Invalid bound statement (not found): com.heima.wemedia.mapper.WmNewsMaterialMapper.saveRelations 译为&#xff1a;无效的绑定语句&…

Ubuntu 23.10/24.04 LTS 放弃默认使用 snap 版 CUPS 打印堆栈

导读Canonical 的开发者、OpenPrinting 的项目负责人 Till Kamppeter 今年 5 月表示&#xff0c;计划在 Ubuntu 23.10&#xff08;Mantic Minotaur&#xff09;上默认使用 Snap 版本的 CUPS 打印堆栈。 不过经过数月的测试&#xff0c;官方放弃了这项决定。Ubuntu 23.10&#x…

MySQL面试题——隔离级别相关面试题

隔离级别相关面试题 MySQL事务隔离级别 未提交读——可以读到其他事务未提交的数据&#xff08;最新的版本&#xff09; 错误现象&#xff1a;脏读、不可重复读、幻读的现象 提交读&#xff08;RC&#xff09;——可以读到其他事务已提交的数据&#xff08;最新已提交的版本&…

TypeScript命名空间和模块

&#x1f3ac; 岸边的风&#xff1a;个人主页 &#x1f525; 个人专栏 :《 VUE 》 《 javaScript 》 ⛺️ 生活的理想&#xff0c;就是为了理想的生活 ! 目录 命名空间&#xff08;Namespace&#xff09; 命名空间&#xff08;Namespace&#xff09;使用场景 第三方库 兼容…

蓝桥杯官网填空题(迷宫)

题目描述 本题为填空题&#xff0c;只需要算出结果后&#xff0c;在代码中使用输出语句将所填结果输出即可。 X 星球的一处迷宫游乐场建在某个小山坡上。它是由 1010 相互连通的小房间组成的。 房间的地板上写着一个很大的字母。我们假设玩家是面朝上坡的方向站立&#xff0…

Spring 的创建和日志框架的整合

目录 一、第一个 Spring 项目 1、配置环境 2、Spring 的 jar 包 Maven 项目导入 jar 包和设置国内源的方法&#xff1a; 3、Spring 的配置文件 4、Spring 的核心 API ApplicationContext 4、程序开发 5、细节分析 &#xff08;1&#xff09;名词解释 &#xff08;2&…

LeetCode 362 期周赛

8029.与车相交的点 题目&#xff1a; 给你一个下标从 0 开始的二维整数数组 nums 表示汽车停放在数轴上的坐标。对于任意下标 i&#xff0c;nums[i] [starti, endi] &#xff0c;其中 starti 是第 i 辆车的起点&#xff0c;endi 是第 i 辆车的终点。 返回数轴上被车 任意部…

自动化控制系统的设计重点是什么?

要实现对选择性激光烧结系统预热温度的控制&#xff0c;需要找到合理的控制对象模型&#xff0c;但选择性激光烧结设备的预热温度场是一个复杂的非线性系统&#xff0c;很难找到合理的控制对象模型来实现预热温度场的温度控制。模糊控制不需要具体的控制模型&#xff0c;预热温…

Linux命令200例:dnsconf用于配置和管理域名解析服务

&#x1f3c6;作者简介&#xff0c;黑夜开发者&#xff0c;CSDN领军人物&#xff0c;全栈领域优质创作者✌。CSDN专家博主&#xff0c;阿里云社区专家博主&#xff0c;2023年6月csdn上海赛道top4。 &#x1f3c6;数年电商行业从业经验&#xff0c;历任核心研发工程师&#xff0…