真实的国产乱ⅩXXX66竹夫人,五月香六月婷婷激情综合,亚洲日本VA一区二区三区,亚洲精品一区二区三区麻豆

成都創(chuàng)新互聯(lián)網(wǎng)站制作重慶分公司

c++如何解決兩個數(shù)組的交集問題

這篇文章主要為大家展示了“c++如何解決兩個數(shù)組的交集問題”,內(nèi)容簡而易懂,條理清晰,希望能夠幫助大家解決疑惑,下面讓小編帶領(lǐng)大家一起研究并學(xué)習(xí)一下“c++如何解決兩個數(shù)組的交集問題”這篇文章吧。

網(wǎng)站建設(shè)公司,為您提供網(wǎng)站建設(shè),網(wǎng)站制作,網(wǎng)頁設(shè)計及定制網(wǎng)站建設(shè)服務(wù),專注于成都定制網(wǎng)頁設(shè)計,高端網(wǎng)頁制作,對成都崗?fù)?/a>等多個行業(yè)擁有豐富的網(wǎng)站建設(shè)經(jīng)驗的網(wǎng)站建設(shè)公司。專業(yè)網(wǎng)站設(shè)計,網(wǎng)站優(yōu)化推廣哪家好,專業(yè)營銷推廣優(yōu)化,H5建站,響應(yīng)式網(wǎng)站。

一、題目描述

給定兩個數(shù)組,編寫一個函數(shù)來計算它們的交集。

示例 1:
輸入:nums1 = [1,2,2,1], nums2 = [2,2]輸出:[2,2]示例 2:輸入:nums1 = [4,9,5], nums2 = [9,4,9,8,4]輸出:[4,9]說明:
輸出結(jié)果中每個元素出現(xiàn)的次數(shù),應(yīng)與元素在兩個數(shù)組中出現(xiàn)次數(shù)的最小值一致。
我們可以不考慮輸出結(jié)果的順序。

二、解題思路

(1) 哈希表查找

解題思路:

  • 用哈希表記錄一個數(shù)組中每個元素出現(xiàn)的次數(shù),myMap{元素:元素出現(xiàn)次數(shù)}

  • 遍歷另一個數(shù)組,當(dāng)哈希表中存在當(dāng)前元素時,則對應(yīng)元素的計數(shù)減1,并將該元素存入res中。

C++實現(xiàn)如下:

class Solution {
   
   
   public:vector intersect(vector& nums1, vector& nums2) {
   
   
   if(nums1.empty() || nums2.empty()) return{
   
   
   };// 哈希表記錄集合中每個元素出現(xiàn)的次數(shù)unordered_map myMap;for( auto &num : nums1 ) myMap[num]++;
        vector res;// 遍歷數(shù)組2for( int i = 0; i < nums2.size(); ++i ){
   
   
   // 判斷數(shù)組2和集合1是否有公共元素if( myMap.count(nums2[i]) ){
   
   
   // 找到后,則對應(yīng)的元素次數(shù)減1if( myMap[nums2[i]] > 0 )res.emplace_back(nums2[i]);// 減少集合1中該數(shù)的次數(shù)myMap[nums2[i]]--;}}return res;}};

運(yùn)行結(jié)果:
c++如何解決兩個數(shù)組的交集問題
復(fù)雜度分析:

  • 時間復(fù)雜度:使用了兩個for()循環(huán),且是前后關(guān)系,因此整體的時間復(fù)雜度是O(n+m),其中 m 和 n 分別是兩個數(shù)組的長度

  • 空間復(fù)雜度:新定義了一個集合myMap來存儲數(shù)組nums1中的元素,所以空間復(fù)雜度也是O(n)或O(m)

(2) 排序+雙指針

解題思路:

  • 首先對兩個數(shù)組進(jìn)行排序,然后使用兩個指針遍歷兩個數(shù)組

  • 初始時,兩個指針分別指向兩個數(shù)組的頭部,每次比較兩個指針指向的兩個數(shù)組中的數(shù)字

  • 如果兩個數(shù)字不相等,則將指向較小數(shù)字的指針右移一位,如果兩個數(shù)字相等,將該數(shù)字添加到答案,并將兩個指針都右移一位。

  • 當(dāng)至少有一個指針超出數(shù)組范圍時,遍歷結(jié)束。

C++實現(xiàn)如下:

class Solution {
   
   
   public:vector intersect(vector& nums1, vector& nums2) {
   
   
   //排序sort(nums1.begin(), nums1.end());sort(nums2.begin(), nums2.end());//獲取數(shù)組長度int len1 = nums1.size();int len2 = nums2.size();//初始指針int index1=0, index2=0;vector res;while(index1 nums2[index2])index2++;//如果元素值大小相同,則雙指針都向后移動一位,且將當(dāng)前值存入reselse{
   
   
   res.push_back(nums1[index1]);index1++;index2++;}}return res;}};

運(yùn)行結(jié)果:
c++如何解決兩個數(shù)組的交集問題
復(fù)雜度分析:

  • 時間復(fù)雜度:O(mlogm+nlogn),其中 m 和 n 分別是兩個數(shù)組的長度。對兩個數(shù)組進(jìn)行排序的時間復(fù)雜度是 O(mlogm+nlogn),遍歷兩個數(shù)組的時間復(fù)雜度是 O(m+n),因此總時間復(fù)雜度是 O(mlogm+nlogn)。

  • 空間復(fù)雜度:除了輸出的數(shù)組res,沒有創(chuàng)建額外的中間數(shù)組,空間復(fù)雜度為O(1)

以上是“c++如何解決兩個數(shù)組的交集問題”這篇文章的所有內(nèi)容,感謝各位的閱讀!相信大家都有了一定的了解,希望分享的內(nèi)容對大家有所幫助,如果還想學(xué)習(xí)更多知識,歡迎關(guān)注創(chuàng)新互聯(lián)行業(yè)資訊頻道!


分享標(biāo)題:c++如何解決兩個數(shù)組的交集問題
轉(zhuǎn)載來源:http://weahome.cn/article/pdcosh.html

其他資訊

在線咨詢

微信咨詢

電話咨詢

028-86922220(工作日)

18980820575(7×24)

提交需求

返回頂部