使用优先队列解决自己构造的数据类型

2023-05-16

在C++中优先队列有两种,最大堆和最小堆。当数据类型为int的时候,大家都会使用,但是如果数据不是单一的,比如数据是一个hashmap怎么办?例子如下:

You are given an array of strings names, and an array heights that consists of distinct positive integers. Both arrays are of length n.

For each index inames[i] and heights[i] denote the name and height of the ith person.

Return names sorted in descending order by the people's heights.

Example 1:


Input: names = ["Mary","John","Emma"], heights = [180,165,170]
Output: ["Mary","Emma","John"]
Explanation: Mary is the tallest, followed by Emma and John.
  

Example 2:


Input: names = ["Alice","Bob","Bob"], heights = [155,185,150]
Output: ["Bob","Alice","Bob"]
Explanation: The first Bob is the tallest, followed by Alice and the second Bob.  

使用优先队列,将会十分简单,难点在于怎么包含两种类型,于是想到了pair这个神奇的东西。然后就是最大堆的比较函数,需要写一个结构体,声明比较函数。于是代码如下:

class Solution {
    typedef pair<string,int> PSI;
    struct cmp
    {
        bool operator()(PSI a, PSI b)
        {
            return a.second<b.second;
        }
    };
public:
    vector<string> sortPeople(vector<string>& names, vector<int>& heights) {
        priority_queue<PSI,vector<PSI>,cmp> pq;
        vector<string> ans;
        for(int i=0;i<heights.size();i++)
        {
            pq.push({names[i],heights[i]});
        }
        while(!pq.empty())
        {
            ans.push_back(pq.top().first);
            pq.pop();
        }
        return ans;
    }
};

 当然,这只是一个解题的模板,因为题目中说身高互不相同,这种方法并没有考虑这个特性,并不是最优解。其他贪心的算法,也可以构建这样的结构来求解。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

使用优先队列解决自己构造的数据类型 的相关文章

  • 在 JETSON 上配置 CAN 总线收发并基于Node.js编写应用DEMO

    概述 CAN 总线 是汽车电子行业常用的通信协议 Nvidia 推出的边缘 AI 推理设备 JETSON TX2 AGX Xavier 两款开发板支持 CAN 总线通信 这里以 AGX Xavier 开发者套件 为例 介绍如何配置实现基本的
  • C++开发UDP通信:使用socket创建UDP服务器端和客户端

    我的主页视频讲解 博客不经常在线 xff0c 私信请到西瓜视频搜索 智能之心 xff0c 以智能之心赴智能之梦 UDP通信步骤 引用UDP通信步骤 一 UDP套接字服务端架构步骤 1 xff0e 初始化套接字环境WSAStartup 2 x
  • D6 PRO充电器使用方法

    充电方式两种 xff1a 接220V供电 xff08 推荐 xff09 接XT60电池供电 接线 xff1a 大头XT60接口平衡头6S 4S 3S 2S接口 xff0c 123456 黑线从右侧减号一侧开始接 xff0c 红线在左侧数字一
  • uORB和MAVLink通讯例程

    uORB uORB 是一种异步 publish subscribe 的消息传递 API xff0c 用于进程或者线程间通信 IPC 添加新的Topic xff08 主题 xff09 在msg 目录下创建一个新的 msg文件 xff0c 并将
  • 往android studio原生java工程中添加jni的过程

    一 配置步骤 xff1a 第一步是在 src main 中建立一个文件夹cpp 第二步是在文件夹中建立两个文件一个是native lib cpp和CMakeLists txt 第三步在上述两文件中添加如下内容 xff1a span clas
  • C++迭代器

    一 什么是迭代器 xff1a C 43 43 中 xff0c 迭代器就是一个类似于指针的对象 xff0c 它能够用来遍历C 43 43 标准模板库容器中的部分或全部元素 xff0c 每个迭代器对象代表容器中的确定的地址 以下面的string
  • webpack vue-loader was used without the corresponding plugin. Make sure to include VueLoaderPlugin

    场景 webpack2 4 集成vue loader 64 15 2 4报错 vue loader was used without the corresponding plugin Make sure to include VueLoad
  • slamugv使用说明--5.电机编码测速

    电机编码器测速 编码器 xff08 encoder xff09 是将信号 xff08 如比特流 xff09 或数据进行编制 转换为可用以通讯 传输和存储的信号形式的设备 编码器把角位移或直线位移转换成电信号 编码器分类及原理 xff1a 按
  • STM32相关名词解释

    L N NO NC COM名词解释 L是line的意思 xff0c 相线 xff0c 俗称火线 xff1b N是neutral xff0c 中性线的意思 xff0c 在两相线中也称为零线 NO xff1a 也就是常开 xff0c 即在未通电
  • 三轴加速度计、三轴陀螺仪、三轴磁力计

    1 今天要做的事情 列出 xff1a 可能影响因素 xff0c 对影响因素做实验 如何设置对比实验 xff1f 如何设置对比实验 xff1f 三轴加速度计 1 加速度计的原理 三轴加速度 xff1a 输出的速度是去掉重力后的整体加速度 xf
  • zed相机使用

    zed立体相机 43 pyhon 43 opencv zed相机网上资料都是关于安装的教程 xff0c 后续的一些使用介绍的不是很多 xff0c 因为官方文档已经介绍的很详细 xff0c 这里介绍一下自己的学习过程 xff0c 以备查阅 x
  • 思岚A1激光雷达hector_mapping建图与定位

    ROS中最常见的定位包还是gmapping xff0c gmapping是需要里程计的数据也就是IMU或者视觉里程计的数据 xff0c 但是目前还是仅仅在电脑中测试 xff0c 并未实现树莓派与飞控通信 xff0c 因此使用不用里程计数据的
  • 科技概念/名词解释

    文章目录 自然科学算法类无人机互联网软件类硬件类计算机架构类人工智能 自然科学 量子 百度百科 量子 xff08 quantum xff09 是现代物理的重要概念 即一个物理量如果存在最小的不可分割的基本单位 xff0c 则这个物理量是量子
  • 自动驾驶基础知识(一)——英文缩写(持续更新...)

    这一篇就先整理一下接触到的英文缩写 xff0c 相当于给自己补补课 xff0c 以后遇到新的 xff0c 会持续更新上来 xff01 英文缩写中文全称英文全称ABS防抱死制动系统Anti lock Braking SystemACCS自适应
  • 自动驾驶基础知识(二)——术语中英文对照

    文章目录 深度学习自动驾驶深度增强学习计算机视觉其他 深度学习 中文名称英文名称人工智能系统Artificial Intelligence System认知负荷Cognitive Load深度学习Deep Learning3D卷积神经网络3
  • 使用Typora绘制流程图

    Typora可以直接在markdown中画流程图 xff0c 而且语法简洁易懂 xff0c 这是个让我异常惊喜的功能 Typora使用flowchart js来生成简单的SVG流程图 xff0c 此外它还支持mermaid engine 要
  • 自动驾驶算法-滤波器系列(八)——IMM交互多模型介绍

    IMM交互多模型介绍 1 简介 xff08 1 xff09 IMM Interacting Multiple Model xff08 2 xff09 马尔科夫概率转移矩阵 2 算法流程 xff08 1 xff09 输入交互 xff08 模型
  • Vue2.* computed property ' ' was assigned to but it has no setter.

    场景分析解决 场景 父组件传递了一个属性给子组件 xff0c 子组件需要在完成某个动作之后 xff0c 修改这个动作 当我将这个计算属性在computed处理后 再次修改的时候 xff0c 会有警告而且修改没有成功 computed pro
  • 深度学习入门(七)——深度学习和视觉的基础数学知识

    深度学习和视觉的基础数学知识 线性变换和非线性变换点积和投影矩阵乘法的几何意义本征向量和本征值奇异值分解线性可分性和维度非线性变换 概率论条件概率和独立期望值 方差和协方差熵最大似然估计KL散度 维度诅咒采样和维度高维空间中的体积和距离中心

随机推荐

  • 深度学习入门(八)——深度卷积神经网络

    深度卷积神经网络 卷积神经网络卷积层和特征响应图参数共享稀疏连接多通道卷积激活函数池化 不变性和感受野分布式表征分层表达卷积神经网络结构 LeNetAlexNet网络结构局部响应归一化 GoogLeNetNetwork In Network
  • 深度学习入门(九)——深度学习框架概览

    深度学习框架概览 CaffeTheanoTensorFlowTorchPytorchMXNetcuda convnet2NeonDeeplearning4jCNTKPaddlePaddleKeras 工欲善其事 xff0c 必先利其器 深度
  • 高级篇之ENC1V2新用法USB/RS232串口转Visca-Over-IP

    高级篇之ENC1V2新用法USB RS232串口转Visca Over IP 术语背景现实需求 大家好 xff0c 最近ENC1 V2卖的很火 xff0c 主要是因为发现了它的一个新用法 xff0c 究竟是什么 xff0c 马上揭晓 术语
  • win10+Python3.7 安装 labelImg, lxml无法找不到DLL

    问题 E labelImg gt labelImg Traceback most recent call last File 34 e anda lib runpy py 34 line 193 in run module as main
  • const和#define的区别,详细!

    区别 xff1a xff08 1 xff09 就起作用的阶段而言 xff1a define是在编译的预处理阶段 起作用 xff0c 而const是在 编译 运行 的时候起作用 xff08 2 xff09 就起作用的方式而言 xff1a de
  • ubuntu16.04使用USB转TTL(ch340)串口转usb调试过程

    输入命令 xff1a lsmod grep usbserial 输入 xff1a lsusb 发现了ch341的一些相关信息 输入命令 xff08 查看USB转串口接入状态 xff09 xff1a dmesg usb 6 1 ch341 u
  • LinuxCNC学习-Machinekit手册介绍

    原文链接 http www machinekit io docs common user intro 1 Machinekit用户手册 1 1 关于手册 本手册的重点是如何 使用 Machinekit 安装并配置了Machinekit后 x
  • LinuxCNC学习-HAL库介绍

    原文链接 xff1a http www machinekit io docs hal intro 1 HAL库介绍 HAL代表硬件抽象层 在最高级别上 xff0c 它只是一种允许加载和互连多个 构建块 以组装复杂系统的方式 硬件 部分是因为
  • double float 类型在内存中的存储形式

    一 基础知识 浮点数分为 单精度和双精度 xff0c 在内存中都分为三部分 xff1b 符号位 xff1b 指数位 xff1b 尾数位 xff1b Float类型内存形式 xff1a 图1 float类型在内存中的形式 double类型内存
  • php array_walk break跳出循环的方法

    场景分析解决 场景 array walk使用的地方不要太多 xff0c 在某种情况眷下需要它跳出循环 分析 break 不是array walk的关键字return 不能达到break的效果 相当于foreach的 continue 歪个楼
  • gazebo黑屏打不开world的解决方法

    打开gazebo的时候会发现一直处于黑屏这种状态 xff0c 这是因为model库加载不正确导致的 cd gazebo mkdir p models cd gazebo models wget http file ncnynl com ro
  • JAVA Http的Post请求传参添加Authorization Basic Auth验证

    PostMan添加Authorization验证 pom xml添加依赖包 lt dependency gt lt groupId gt org apache commons lt groupId gt lt artifactId gt c
  • 一个字符串吧大写字母转换为小写字母

    709 转换成小写字母 难度简单140收藏分享切换为英文接收动态反馈 实现函数 ToLowerCase xff0c 该函数接收一个字符串参数 str xff0c 并将该字符串中的大写字母转换成小写字母 xff0c 之后返回新的字符串 示例
  • TX2/Linux下can总线的接收与发送命令和C程序实例

    本文博客深度参考了前辈的作品 xff1a TX2 Linux下can总线的接收与发送详解 xff01 https blog csdn net hhlenergystory article details 81976069 Linux CAN
  • ubuntu18.04 安装Qt交叉编译环境目标机为rk3288

    本文在虚拟机条件下安装成功 xff0c 采用Ubuntu18 04 64位镜像作为编译环境 需要准备材料 交叉编译器 xff1a 目标机器为64位的使用 gcc linaro 6 3 1 2017 05 x86 64 aarch64 lin
  • 使用matlab实现指定三维区域随机生成N个不相交球的函数

    自从写了这篇博客之后 xff0c 更多的人来问我这个问题了 简单写一个随机在一个三维区域生成球的matlab函数 风一样的航哥的博客 CSDN博客 comsol随机生成球体 上次简单写的功能 xff0c 可以实现一些比较稀疏的分布 xff0
  • 在嵌入式里面实现printf()类似的功能

    学习C语言大多数都是从printf 34 hello world 34 开始的 xff0c 对于printf的熟悉程度最高 xff0c 在嵌入式编程中 xff0c 实现printf函数有一种很标准的办法就是实现putch xff0c 绑定对
  • 我的第一个rust程序,感受一下

    周末了 xff0c 要学习一点让自己开心的东西 听说rust语言很年轻 xff0c 性能超过了C 43 43 xff0c 还能支持嵌入式编程 xff0c 作为一名未来要出名的代码工程师 xff0c 岂能错过 xff1f 于是上周开始学习这个
  • 走进他人内心的七项修炼

    本文是一篇读书笔记 xff0c 书名叫 我就是你啊 之所以看这本书 xff0c 是因为在结婚之后 xff0c 发现很多时候会吵架 xff0c 会发现自己情绪不好 xff0c 然后无能为力去解决 让我们来回顾一下 xff0c 化解一场纷争需要
  • 使用优先队列解决自己构造的数据类型

    在C 43 43 中优先队列有两种 xff0c 最大堆和最小堆 当数据类型为int的时候 xff0c 大家都会使用 xff0c 但是如果数据不是单一的 xff0c 比如数据是一个hashmap怎么办 xff1f 例子如下 xff1a You