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.pswp.cn/news/713260.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/713260.shtml
英文地址,請注明出處:http://en.pswp.cn/news/713260.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

python模型訓練

目錄 1、新建模型 train_model.py 2、運行模型 &#xff08;1&#xff09;首先會下載data文件庫 &#xff08;2&#xff09;完成之后會開始訓練模型&#xff08;10次&#xff09; 3、 訓練好之后&#xff0c;進入命令集 4、輸入命令&#xff1a;python -m tensorboard.ma…

網絡工程師筆記6

ICMP協議 Internet控制報文協議ICMP(InternetControlMessage Protocol)是網絡層的一個重要協議。ICMP協議用來在網絡設備間傳遞各種差錯和控制信息&#xff0c;它對于收集各種網絡信息、診斷和排除各種網絡故障具有至關重要的作用。使用基于ICMP的應用時&#xff0c;需要對ICMP…

Vue.js+SpringBoot開發社區買菜系統

目錄 一、摘要1.1 項目介紹1.2 項目錄屏 二、系統設計2.1 功能模塊設計2.1.1 數據中心模塊2.1.2 菜品分類模塊2.1.3 菜品檔案模塊2.1.4 菜品訂單模塊2.1.5 菜品收藏模塊2.1.6 收貨地址模塊 2.2 可行性分析2.3 用例分析2.4 實體類設計2.4.1 菜品分類模塊2.4.2 菜品檔案模塊2.4.3…

多輸入多輸出 | Matlab實現RIME-BP霜冰算法優化BP神經網絡多輸入多輸出預測

多輸入多輸出 | Matlab實現RIME-BP霜冰算法優化BP神經網絡多輸入多輸出預測 目錄 多輸入多輸出 | Matlab實現RIME-BP霜冰算法優化BP神經網絡多輸入多輸出預測預測效果基本介紹程序設計往期精彩參考資料 預測效果 基本介紹 多輸入多輸出 | Matlab實現RIME-BP霜冰算法優化BP神經網…

Springboot+vue的考勤管理系統(有報告)。Javaee項目,springboot vue前后端分離項目。

演示視頻&#xff1a; Springbootvue的考勤管理系統&#xff08;有報告&#xff09;。Javaee項目&#xff0c;springboot vue前后端分離項目。 項目介紹&#xff1a; 采用M&#xff08;model&#xff09;V&#xff08;view&#xff09;C&#xff08;controller&#xff09;三層…

GitHub Copilot extension activation error: ‘No access to GitHub Copilot found‘

好不容易學生認證通過了&#xff0c;打開vscode用copilot結果一直報這個錯誤。我的原因是&#xff1a;還未給copilot授權&#xff0c; 通過了學生認證后要進入這里進行授權&#xff1a;

Vue Html中插入本地視頻(Video 標簽)

在 Vue 中插入本地視頻可以通過使用標簽來實現。你可以將視頻文件放在你的項目中的合適位置&#xff08;比如assets文件夾&#xff09;&#xff0c;然后在 Vue 組件中引用這個視頻文件。html同理 首先&#xff0c;在你的 Vue 項目中的assets文件夾下放入你的視頻文件&#xff…

k8s單機部署zookeeper

&#xff08;作者&#xff1a;陳玓玏&#xff09; 拉取鏡像&#xff1a;docker pull zookeeper&#xff1b;編輯yaml&#xff1a; apiVersion: v1 kind: Service metadata:name: zookeeperlabels:app: zookeeper spec:ports:- name: clientport: 2181protocol: TCPtargetP…

QT TCP傳輸文件+ui

TCPFile tcp協議傳輸文件 TCPFile.pro QT core gui networkclientwidget.h #include <QWidget> #include <QTcpSocket> // 通信套接字 #include <QFile>private slots:void on_pushButton_clicked();private:QTcpSocket *tcpSocket;QFile file; /…

selenium進階設置

1、無頭瀏覽設置和規避爬蟲檢測 問題一&#xff1a;有界面時可以展示的元素&#xff0c;無頭模式報錯element not interactable 解決方法&#xff1a;通過錯誤截圖發現&#xff0c;頁面上有該元素&#xff0c;但是頁面不夠大&#xff0c;沒有顯示想定位的元素。 from seleni…

centos7 安裝 docker-compose

1、直接參考官方&#xff1a; Install Compose standalone | Docker Docs 1、安裝命令 curl -SL https://github.com/docker/compose/releases/download/v2.24.6/docker-compose-linux-x86_64 -o /usr/local/bin/docker-compose 2、修改 docker-compose 執行權限 不修改執行權…

升級pycharm之后,jupyter無法識別新安裝的包

import sys print(sys.executable)在jupyter中運行&#xff0c;檢測一下當前jupyter內核運行在哪個環境中-再pycharm的setting里面設置jupyter環境并沒有什么用。需要重新在想要使用的環境中重新安裝jupyter內核&#xff0c;并且重啟。

c# cad2016系統變量解釋說明

一、cad系統變量設置和獲取 /// <summary> /// 設置CAD系統變量 /// </summary> /// <param name"name">變量名</param> /// <param name"value">變量值</param> public static void SetSystemVariable(string name,…

Sora背后的技術原理:深度探索Video Compression Network與語言理解在視頻生成中的應用

Sora背后的技術原理&#xff1a;深度探索Video Compression Network與語言理解在視頻生成中的應用 摘要&#xff1a; 隨著人工智能技術的飛速發展&#xff0c;視頻生成技術逐漸成為研究熱點。Sora作為一種先進的視頻生成技術&#xff0c;其背后的技術原理值得深入研究。本文詳…

物聯網平臺如何實現SaaS化

物聯網平臺實現SaaS化是一個復雜的過程&#xff0c;涉及到多個關鍵步驟和要素。以下是實現物聯網平臺SaaS化的主要步驟和要點&#xff0c;以及如何確保成功實施。 一、平臺架構設計是實現SaaS化的基礎 一個分布式、模塊化的架構設計對于支持多租戶、高并發、高可擴展性等特性…

【Django】執行查詢—F()表達式

F() F()可以實現將模型字段值與同一模型中的另一字段做比較。舉個例子看一下&#xff1a; class Entry(models.Model):...number_of_comments models.IntegerField(default0)number_of_pingbacks models.IntegerField(default0)...找到所有 number_of_pingbacks 大于 numbe…

大數據權限認證 Kerberos 部署

文章目錄 1、什么是 Kerberos2、Kerberos 術語和原理2.1、Kerberos 術語2.1、Kerberos 原理 3、Kerberos 服務部署3.1、前置條件3.2、安裝依賴3.3、配置 krb5.conf3.4、配置 kdc.conf3.5、配置 kadm5.acl3.6、安裝 KDC 數據庫3.7、啟動服務3.8、創建 Kerberos 管理員3.9、創建普…

idea 手動打 jar 包

1.在 File 中找到并點擊 Project Structure 2.按圖中高亮的部分依次點擊 3.在 Main Class 處設置要打包的類&#xff0c;記得在 Directory for ... 處設置目錄為根目錄&#xff0c;設置好以后點擊兩次 OK 回到首頁 4.在頁面上方找到 Build &#xff0c;點擊 Build Artifacts...…

【Linux】在 Ubuntu 系統下使用 Screen 運行 Python 腳本

在 Ubuntu 系統下使用 Screen 運行 Python 腳本的優點 在 Ubuntu 操作系統中&#xff0c;Screen 是一種非常有用的工具&#xff0c;特別是在需要長時間運行的任務或者需要在后臺運行的任務中。結合 Python 腳本&#xff0c;Screen 提供了一種靈活且高效的方式來管理和執行任務…

ECOVADIS評估-自2024年1月1日起發布的記分卡的資格標準說明

EcoVadis評分&#xff08;0-100分&#xff09;反映了進行評估時公司的企業社會責任管理體系的質量。EcoVadis獎牌和獎章計劃旨在表彰按EcoVadis評估方法中所述&#xff0c;已完成EcoVadis評估流程并展示出相對強大的管理系統來解決企業社會責任標準的合格公司。獎牌和獎章的資格…