題目練習之set的奇妙使用


???~~~~~~歡迎光臨知星小度博客空間~~~~~~???

???零星地變得優秀~也能拼湊出星河~???

???我們一起努力成為更好的自己~???

???如果這一篇博客對你有幫助~別忘了點贊分享哦~???

???如果有什么問題可以評論區留言或者私信我哦~???

?????? 個人主頁??????

上一篇博客我們已經對set容器進行了詳細的介紹,相信大家對set有了更加深刻的認識,光說不練假把式,這一篇博客我們就來使用set容器在我們的算法題大放異彩~準備好了嗎~我們發車去探索C++的奧秘啦~🚗🚗🚗🚗🚗🚗

兩個數組的交集

兩個數組的交集

????????按照我們以前的思路我們可以新建一個數組,然后遍歷原來的兩個數組,找到重復元素保存到新數組里面~

int* intersection(int* nums1, int nums1Size, int* nums2, int nums2Size, int* returnSize) 
{
int i=0;
int j=0;
int k=0;
int count=0;
int*arr=(int*)malloc(sizeof(int)*1000);
for (i = 0; i < nums1Size; i++)
{int flag = 1;for (j = 0; j < nums2Size; j++){if (nums1[i] == nums2[j]){for (k = 0; k <= count; k++){if (arr[k] == nums1[i]){flag = 0;break;}}if (flag != 0){arr[count] = nums1[i];count++;}break;}}
}*returnSize=count;return arr;
}

????????現在有了set容器,我們就可以采用新思路:

??????? 1、分別使用兩個set容器保存兩個數組元素,這就完成了去重+排序的功能,我們后面也就不需要處理重復的問題~

??????? 2、使用迭代器遍歷容器,這里有兩種情況

????????????????如果相等就保存到返回的數組中,迭代器都++

??????????????? 如果不相等就讓元素小的那個迭代器進行++

class Solution 
{
public:vector<int> intersection(vector<int>& nums1, vector<int>& nums2) {//使用set保存數據set<int> s1(nums1.begin(),nums1.end());set<int> s2(nums2.begin(),nums2.end());vector<int> ret;//使用迭代器遍歷auto it1=s1.begin();auto it2=s2.begin();while(it1 != s1.end() && it2 != s2.end())//一個走到末尾就結束{//如果相等保存數據,然后都++if(*it1==*it2){ret.push_back(*it1);it1++;it2++;}//不相等,小的++else if(*it1 < *it2){it1++;}else if(*it1 > *it2){it2++;}}return ret;}
};

成功通過,并且時間復雜度也十分優秀~

環形鏈表Ⅱ

環形鏈表Ⅱ

這個題目我們也使用C語言做過,可以看看這篇博客的代碼題目練習之鏈表那些事兒(再續)

可以看出當時思路還是比較復雜的,還需要進行證明才得出來思路,現在有了set容器,我們就可以降維打擊了~

新思路

??????? 使用set容器保存結點指針,使用set的count進行計數,如果它已經有了,說明結點指針重復,那么這就是一個環形鏈表,當前結點指針就是第一個入環的,直接返回;如果沒有插入set,繼續遍歷~

/*** Definition for singly-linked list.* struct ListNode {*     int val;*     ListNode *next;*     ListNode(int x) : val(x), next(NULL) {}* };*/
class Solution 
{
public:ListNode *detectCycle(ListNode *head) {set<ListNode*> s;ListNode* cur = head;while(cur){//如果有就成環了,直接返回if(s.count(cur)) return cur;//如果沒有,插入容器繼續遍歷s.insert(cur);cur=cur->next;}//走到結束return nullptr;}
};

成功通過,我們可以看到這個set的妙處就更加明顯啦~

當然,我們除了使用count判斷,還可以使用insert的返回值進行判斷,前面我們說set容器insert接口返回值類型是pair類型,第二個是bool類型的,如果返回的是false說明插入失敗,那么這就是第一個入環結點了~

/*** Definition for singly-linked list.* struct ListNode {*     int val;*     ListNode *next;*     ListNode(int x) : val(x), next(NULL) {}* };*/
class Solution 
{
public:ListNode *detectCycle(ListNode *head) {set<ListNode*> s;ListNode* cur = head;while(cur){//根據insert返回值判斷if(s.insert(cur).second==false) return cur;cur=cur->next;}//走到結束return nullptr;}
};

這里的代碼也就更加簡單,不得不說set容器的使用大大提高了我們的效率,我們要學會在合適的時候進行使用~這樣就可以事半功倍了~


???本篇博客內容結束,期待與各位優秀程序員交流,有什么問題請私信???

???如果這一篇博客對你有幫助~別忘了點贊分享哦~???

??????個人主頁??????


本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/900528.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/900528.shtml
英文地址,請注明出處:http://en.pswp.cn/news/900528.shtml

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

相關文章

Java虛擬機——JVM(Java Virtual Machine)解析一

1.JVM是什么&#xff1f; 1.1 JVM概念 Java Virtual Machine (JVM) 是JDK的核心組件之一&#xff0c;它使得 Java 程序能夠在任何支持 JVM 的設備或操作系統上運行&#xff0c;而無需修改源代碼 JDK是什么&#xff0c;JDK和JVM是什么關系&#xff1f;1.Java IDE(Integrated …

初識 Three.js:開啟你的 Web 3D 世界 ?

3D 技術已經不再是游戲引擎的專屬&#xff0c;隨著瀏覽器技術的發展&#xff0c;我們完全可以在網頁上實現令人驚艷的 3D 效果。而 Three.js&#xff0c;作為 WebGL 的封裝庫&#xff0c;讓 Web 3D 的大門向更多開發者敞開了。 這是我開啟這個 Three.js 專欄的第一篇文章&…

OpenGL ES -> SurfaceView + EGL實現立方體紋理貼圖+透視效果

XML文件 <?xml version"1.0" encoding"utf-8"?> <com.example.myapplication.MySurfaceView xmlns:android"http://schemas.android.com/apk/res/android"android:layout_width"match_parent"android:layout_height"…

pikachu靶場搭建教程,csfr實操

靶場安裝 靶場下載地址 百度網盤下載地址和密碼 百度網盤 請輸入提取碼 0278 github靶場下載地址 https://gitcode.com/Resource-Bundle-Collection/c7cc1 安裝前提 這兩個文件夾的配置文件都要進行更改修改數據庫密碼 D:\phpstudy_pro\WWW\pikachu\inc D:\phpstudy_pro…

浙江大學DeepSeek系列專題線上公開課第二季第四期即將上線!端云協同:讓AI更懂你的小心思! - 張圣宇 研究員

今晚8點10分左右&#xff0c;端云協同&#xff1a;讓AI更懂你的小心思&#xff01;浙大學者張圣宇研究員將揭秘人機交互新玩法。浙江大學DeepSeek系列專題線上公開課第二季第四期即將上線&#xff01; 講座 主題&#xff1a; 大小模型端云協同賦能人機交互 主講人&#xff1a…

Vue3實戰三、Axios封裝結合mock數據、Vite跨域及環境變量配置

目錄 Axios封裝、調用mock接口、Vite跨域及環境變量配置封裝Axios對象調用mock接口數據第一步、安裝axios&#xff0c;處理一部請求第二步、創建request.ts文件第三步、本地模擬mock數據接口第四步、測試axiosmock接口是否可以調用第五步、自行擴展 axios 返回的數據類型 axios…

Linux如何刪除文件名包含無效編碼字符文件

在Linux中&#xff0c;文件名包含無效編碼字符或特殊不可見字符時&#xff0c;可能導致此文件無法通過常規方式選中或刪除&#xff0c;可以通過下面方法處理 1、確認文件名問題 檢查終端編碼環境 echo $LANG # 默認應為 UTF-8&#xff08;如 en_US.UTF-8&#xff09; 查看…

Completablefuture的底層原理是什么

參考面試回答&#xff1a; 個人理解 CompletableFuture 是 Java 8 引入的一個類、它可以讓我們在多線程環境中更加容易地處理異步任務。CompletableFuture 的底層原理是基于一個名為 FutureTask 的機制、結合了 監聽器模式 和 等待-通知機制 來處理異步計算。 1.首先就是Com…

C/C++ 調用約定:深入理解棧與平棧

前言 在編程中&#xff0c;理解函數調用約定和棧的機制對于編寫高效代碼、調試程序以及進行逆向工程至關重要。本文將深入探討 C 和 C 的調用約定&#xff0c;以及棧與平棧的相關知識。 C 調用約定 在 C 語言中&#xff0c;默認的調用約定是 cdecl。cdecl 調用約定的特點如下&…

xv6-labs-2024 lab1

lab-1 注&#xff1a;實驗環境在我的匯編隨手記的末尾部分有搭建教程。 0.前置 第零章 xv6為我們提供了多種系統調用&#xff0c;其中&#xff0c;exec將從某個文件里讀取內存鏡像(這確實是一個好的說法)&#xff0c;并且將其替換到調用它的內存空間&#xff0c;也就是這個…

屬性修改器 (AttributeModifier)

主頁面設置組件 import { MyButtonModifier } from ../datastore/MyButtonModifier;Entry ComponentV2 struct MainPage {// 支持用狀態裝飾器修飾&#xff0c;行為和普通的對象一致Local modifier: MyButtonModifier new MyButtonModifier();build() {Column() {Button(&quo…

【 <二> 丹方改良:Spring 時代的 JavaWeb】之 Spring Boot 中的監控:使用 Actuator 實現健康檢查

<前文回顧> 點擊此處查看 合集 https://blog.csdn.net/foyodesigner/category_12907601.html?fromshareblogcolumn&sharetypeblogcolumn&sharerId12907601&sharereferPC&sharesourceFoyoDesigner&sharefromfrom_link <今日更新> 一、引子&…

類和對象(下篇)(詳解)

【本節目標】 1. 再談構造函數 2. Static成員 3. 友元 4. 內部類 5. 再次理解封裝 1. 再談構造函數 1.1 構造函數體賦值 在創建對象時&#xff0c;編譯器通過調用構造函數&#xff0c;給對象中各個成員變量一個合適的初始值。 #include <iostream> using name…

高精度算法

高精度加法 輸入兩個數&#xff0c;輸出他們的和&#xff08;高精度&#xff09; 輸入樣例 111111111111111111111111111111 222222222222222222222222222222 輸出樣例 333333333333333333333333333333 #include <bits/stdc.h> using namespace std;string a,b; in…

Linux開發中注意哪些操作系統安全

在 Linux 開發中&#xff0c;確保操作系統的安全至關重要。以下是一些需要注意的方面&#xff1a; 用戶管理與權限控制 合理設置用戶權限&#xff1a;為不同的用戶和用戶組分配適當的權限&#xff0c;遵循最小權限原則。避免給普通用戶過多的權限&#xff0c;以免他們誤操作或…

x64dbg調試python解釋器

可以先寫個input()這會讓dbg中斷在ntdll模塊中&#xff0c;查看調用堆棧在系統調用結束后的打斷點 然后直接斷到PyObject_Vectorcall函數

? Ultralytics YOLO驗證(Val)時自動輸出COCO指標(AP):2025最新配置與代碼詳解 (小白友好 + B站視頻)

? YOLO獲取COCO指標(3)&#xff1a;驗證(Val) 啟用 COCO API 評估&#xff08;自動輸出AP指標&#xff09;| 發論文必看&#xff01; | Ultralytics | 小白友好 文章目錄 一、問題定位二、原理分析三、解決方案與實踐案例步驟 1: 觸發 COCO JSON 保存步驟 2: 確保 self.is_coc…

【嵌入式學習3】基于python的tcp客戶端、服務器

目錄 1、tcp客戶端 2、tcp服務器 3、服務器多次連接客戶端、多次接收信息 1、tcp客戶端 """ tcp:客戶端 1. 導入socket模塊 2. 創建socket套接字 3. 建立tcp連接(和服務端建立連接) 4. 開始發送數據(到服務端) 5. 關閉套接字 """ import soc…

Linux: network: 兩臺直連的主機業務不通

前提環境,有一個產品的設定是兩個主機之間必須是拿網線直連。但是設備管理者可能誤將設置配錯,不是直連。 最近遇到一個問題,說一個主機發的包,沒有到對端,一開始懷疑設定的bond設備的問題,檢查了bond的設置狀態,發現沒有問題,就感覺非常的奇怪。后來就開始懷疑兩個主機…

COMSOL固體力學接觸

目錄 一、接觸非線性及接觸面積計算 一、接觸非線性及接觸面積計算 COMSOL接觸非線性及接觸面積計算_嗶哩嗶哩_bilibili 形成聯合體&#xff0c;在定義處右鍵選擇“建立接觸對” 位移dz使用參數化掃描。 接觸選擇定義中設置的接觸對&#xff0c;選擇罰函數&#xff0c;摩擦設置…