map和set例题应用

个人主页:Lei宝啊 

愿所有美好如期而遇


目录

第一题 

第二题

第三题


第一题 

随机链表的复制icon-default.png?t=N7T8https://leetcode.cn/problems/copy-list-with-random-pointer/description/

思路 

首先遍历旧链表,并创建新节点,同时用map将旧节点与新节点存起来建立联系,这样在遍历新链表填充random的时候,就可以这样填Node* copy = m[cur]; copy->random = m[copy->random];

代码

class Solution {
public:Node* copyRandomList(Node* head) {Node* cur = head;Node* phead = nullptr;Node* ptail = nullptr;map<Node*,Node*> m;while(cur){Node* temp = new Node(cur->val);if(phead == nullptr){phead = ptail = temp;}else{ptail->next = temp;ptail = ptail->next;}m[cur] = temp;cur = cur->next;}cur = head;while(cur){Node* copy = m[cur];if(cur->random == nullptr)copy->random = nullptr;elsecopy->random = m[cur->random];cur = cur->next;}return phead;}
};

第二题

前K个高频单词icon-default.png?t=N7T8https://leetcode.cn/problems/top-k-frequent-words/description/

思路 

这道题有两个点,第一个点是按照单词出现频率排序,第二个点是频率相同,按字母的字典序排序。

首先我们可以使用map<string,int>来存单词和他的频率,这样这些单词就先进行了字典序排序,接着将map里的元素拷贝到一个vector<pair<string,int>>中,然后按照频率排序,但是这个排序必须是稳定排序,因为我们一开始在map中就已经按照字典序排好了单词,接下来按照频率排序时,稳定排序不会改变原来频率相同单词的相对顺序,所以这里的排序有两种选择,第一种就是使用库里的stable_sort,这个底层使用的归并排序,是稳定排序,而sort是不稳定排序,底层使用的快排。第二种就是使用sort,改变他的排序方式,有一个参数Compare comp,就是一个仿函数的对象,我们需要自己写一个仿函数,然后传递他的对象。

代码

class Solution {
public:class Compare{public:bool operator()(const pair<string,int>& k, const pair<string,int>& v){return k.second > v.second || (k.second == v.second && k.first < v.first);}};vector<string> topKFrequent(vector<string>& words, int k) {//去重并按照字典顺序排序map<string,int> m;for(auto &e : words){m[e]++;}//按照频率排序,并在频率相同时按照字典序排序vector<pair<string,int>> v(m.begin(),m.end());sort(v.begin(),v.end(),Compare());vector<string> ret;for(auto &e : v){ret.push_back(e.first);k--;if(k == 0) break;}return ret;}
};

第三题

两个数组的交集icon-default.png?t=N7T8https://leetcode.cn/problems/intersection-of-two-arrays/description/

思路

这里需要使输出结果的每个元素唯一,那么我们需要对原来的容器中的元素进行去重,这里我们可以使用set,第一种方式,我们使用set去重后,使用迭代器遍历其中一个set,然后在另一个set中找是否存在,存在就push_back进我们的vector中。第二种方式,我们使用迭代器遍历两个set,然后使*it1和*it2中小的++,大的继续往后走,相等的就push_back,这种方法的好处是不仅可以取交集,还可以取差集(相等跳过,不相等留下)。

代码

class Solution 
{
public:vector<int> intersection(vector<int>& nums1, vector<int>& nums2){set<int> st1(nums1.begin(),nums1.end());set<int> st2(nums2.begin(),nums2.end());vector<int> v;set<int>::iterator it1 = st1.begin();set<int>::iterator it2 = st2.begin();while(it1 != st1.end() && it2 != st2.end()){if(*it1 < *it2) it1++;else if(*it1 > *it2) it2++;else{v.push_back(*it1);it1++;it2++;} }return v;}
};

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

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

相关文章

存储过程基本了解

文章目录 介绍存储过程示例1. 目的2. 输入参数3. 输出参数4. 执行逻辑5. 返回值6. 示例用法7. 注意事项 存储过程的关键字有哪些简单实操 介绍 存储过程是一组预编译的SQL语句&#xff0c;以及流程控制语句&#xff0c;封装在数据库服务器中并可以被重复调用。它们可以接收参数…

Mac 重新安装系统

Mac 重新安装系统 使用可引导安装器重新安装&#xff08;可用于安装非最新的 Mac OS&#xff0c;系统降级&#xff0c;需要清除所有数据&#xff09; 插入制作好的可引导安装器&#xff08;U盘或者移动固态硬盘&#xff09;&#xff0c;如何制作可引导安装器将 Mac 关机将 Ma…

MyBatis 学习(三)之 MyBatis 全局配置文件

目录 1 MyBatis 全局配置文件 2 properties 元素 3 setting 设置 4 typeAlianses 别名处理器 5 typeHandler 类型处理器 6 objectFacotry 对象工厂&#xff08;了解&#xff09; 7 plugins 插件&#xff08;了解&#xff09; 8 environments 运行环境 9 databaseIdPro…

TDengine 研发分享:利用 Windbg 解决内存泄漏问题的实践和经验

内存泄漏是一种常见的问题&#xff0c;它会导致程序的内存占用逐渐增加&#xff0c;最终导致系统资源耗尽或程序崩溃。AddressSanitizer (ASan) 和 Valgrind 是很好的内存检测工具&#xff0c;TDengine 的 CI 过程就使用了 ASan 。不过这次内存泄漏问题发生在 Windows 下&#…

探秘Python的Pipeline魔法

前些天发现了一个巨牛的人工智能学习网站&#xff0c;通俗易懂&#xff0c;风趣幽默&#xff0c;忍不住分享一下给大家。点击跳转到网站AI学习网站。 目录 前言 什么是Pipeline&#xff1f; Pipeline的基本用法 Pipeline的高级用法 1. 动态调参 2. 并行处理 3. 多输出 …

AVL 树

AVL树的概念 二叉搜索树虽可以缩短查找的效率&#xff0c;但如果数据有序或接近有序二叉搜索树将退化为单支树&#xff0c;查找元素相当于在顺序表中搜索元素&#xff0c;效率低下。因此&#xff0c;两位俄罗斯的数学家G.M.Adelson-Velskii和E.M.Landis在1962年 发明了一种解决…

Qt的QFileSystemModel与QTreeView、QTableView、QListView的组合使用

1.相关描述 QFileSystemModel与QTreeView、QTableView、QListView的组合&#xff0c;当QTreeView点击发生改变&#xff0c;QTableView和QListView也会发生变化 2.相关界面 3.相关代码 mainwindow.cpp #include "mainwindow.h" #include "ui_mainwindow.h"…

Chrome插件 | WEB 网页数据采集和爬虫程序

无边无形的互联网遍地是数据&#xff0c;品类丰富、格式繁多&#xff0c;包罗万象。数据采集&#xff0c;或说抓取&#xff0c;就是把分散各处的内容&#xff0c;通过各种方式汇聚一堂&#xff0c;是个有讲究要思考的体力活。君子爱数&#xff0c;取之有道&#xff0c;得注意遵…

3.1 IO进程线程

使用fwrite、fread将一张随意的bmp图片&#xff0c;修改成德国的国旗 #include <stdio.h> #include <string.h> #include <unistd.h> #include <stdlib.h> int main(int argc, const char *argv[]) {FILE* fp fopen("./2.bmp","r&quo…

【JVM】聊聊常见的JVM排查工具

JDK工具包 jps 虚拟机进程状况工具 jps是虚拟机进程状况工具&#xff0c;列出正在运行的虚拟机进程&#xff0c;使用 Windows 的任务管理器或 UNIX 的 ps 命令也可以查询&#xff0c;但如果同时启动多个进程&#xff0c;必须依赖 jps。jps -l 显示类名 jps :列出Java程序进程…

物联网通信协议介绍

为了方便&#xff0c;将物联网通信协议分为两大类&#xff0c;一类是接入协议&#xff0c;一类是通讯协议。接入协议一般负责子网内设备间的组网及通信&#xff1b;通讯协议主要是运行在传统互联网TCP/IP协议之上的设备通讯协议&#xff0c;负责设备通过互联网进行数据交换及通…

js截取图片地址后面的参数和在路径中截取文件名或后缀名

文章目录 前言截取地址 &#xff1f;后面的参数在路径中截取文件名或后缀名总结 前言 在处理网页上的图片资源或者其他类型的文件资源时&#xff0c;你可能会遇到需要使用这些技巧的情况。以下是一些具体的使用场景&#xff1a; 动态修改图片参数&#xff1a;如果你有一个图片U…