日日操夜夜添-日日操影院-日日草夜夜操-日日干干-精品一区二区三区波多野结衣-精品一区二区三区高清免费不卡

公告:魔扣目錄網為廣大站長提供免費收錄網站服務,提交前請做好本站友鏈:【 網站目錄:http://www.ylptlb.cn 】, 免友鏈快審服務(50元/站),

點擊這里在線咨詢客服
新站提交
  • 網站:51998
  • 待審:31
  • 小程序:12
  • 文章:1030137
  • 會員:747

 

作者:愛做夢的魚

原文:https://blog.csdn.net/weixin_43124279/article/details/107314686

「JAVA」兩個數(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]

說明:

輸出結果中每個元素出現(xiàn)的次數(shù),應與元素在兩個數(shù)組中出現(xiàn)的次數(shù)一致。

我們可以不考慮輸出結果的順序。

進階:

如果給定的數(shù)組已經排好序呢?你將如何優(yōu)化你的算法?

如果 nums1 的大小比 nums2 小很多,哪種方法更優(yōu)?

如果 nums2的元素存儲在磁盤上,磁盤內存是有限的,并且你不能一次加載所有的元素到內存中,你該怎么辦?

方法一:簡單、暴力(有問題)

「JAVA」兩個數(shù)組的交集—力扣每日一題(一)

 


「JAVA」兩個數(shù)組的交集—力扣每日一題(一)

 

方法二:哈希表

由于同一個數(shù)字在兩個數(shù)組中都可能出現(xiàn)多次,因此需要用哈希表存儲每個數(shù)字出現(xiàn)的次數(shù)。對于一個數(shù)字,其在交集中出現(xiàn)的次數(shù)等于該數(shù)字在兩個數(shù)組中出現(xiàn)次數(shù)的最小值。

首先遍歷第一個數(shù)組,并在哈希表中記錄第一個數(shù)組中的每個數(shù)字以及對應出現(xiàn)的次數(shù),然后遍歷第二個數(shù)組,對于第二個數(shù)組中的每個數(shù)字,如果在哈希表中存在這個數(shù)字,則將該數(shù)字添加到答案,并減少哈希表中該數(shù)字出現(xiàn)的次數(shù)。

為了降低空間復雜度,首先遍歷較短的數(shù)組并在哈希表中記錄每個數(shù)字以及對應出現(xiàn)的次數(shù),然后遍歷較長的數(shù)組得到交集。

「JAVA」兩個數(shù)組的交集—力扣每日一題(一)

 


「JAVA」兩個數(shù)組的交集—力扣每日一題(一)

 

復雜度分析

時間復雜度:O(m+n),其中 mm 和 nn 分別是兩個數(shù)組的長度。需要遍歷兩個數(shù)組并對哈希表進行操作,哈希表操作的時間復雜度是 O(1),因此總時間復雜度與兩個數(shù)組的長度和呈線性關系。

空間復雜度:O(min(m,n)),其中 mm 和 nn 分別是兩個數(shù)組的長度。對較短的數(shù)組進行哈希表的操作,哈希表的大小不會超過較短的數(shù)組的長度。為返回值創(chuàng)建一個數(shù)組 intersection,其長度為較短的數(shù)組的長度。

方法三:排序

如果兩個數(shù)組是有序的,則可以便捷地計算兩個數(shù)組的交集。

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

初始時,兩個指針分別指向兩個數(shù)組的頭部。每次比較兩個指針指向的兩個數(shù)組中的數(shù)字,如果兩個數(shù)字不相等,則將指向較小數(shù)字的指針右移一位,如果兩個數(shù)字相等,將該數(shù)字添加到答案,并將兩個指針都右移一位。當至少有一個指針超出數(shù)組范圍時,遍歷結束。

「JAVA」兩個數(shù)組的交集—力扣每日一題(一)

 


「JAVA」兩個數(shù)組的交集—力扣每日一題(一)

 

復雜度分析

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

空間復雜度:O(min(m,n)),其中 mm 和 nn 分別是兩個數(shù)組的長度。為返回值創(chuàng)建一個數(shù)組 intersection,其長度為較短的數(shù)組的長度。不過在 C++ 中,我們可以直接創(chuàng)建一個 vector,不需要把答案臨時存放在一個額外的數(shù)組中,所以這種實現(xiàn)的空間復雜度為 O(1)。

結語

如果 nums2的元素存儲在磁盤上,磁盤內存是有限的,并且你不能一次加載所有的元素到內存中。那么就無法高效地對nums2進行排序,因此推薦使用方法二而不是方法三。在方法二中,nums2 只關系到查詢操作,因此每次讀取nums2中的一部分數(shù)據(jù),并進行處理即可。

 

 

 

分享到:
標簽:JAVA
用戶無頭像

網友整理

注冊時間:

網站:5 個   小程序:0 個  文章:12 篇

  • 51998

    網站

  • 12

    小程序

  • 1030137

    文章

  • 747

    會員

趕快注冊賬號,推廣您的網站吧!
最新入駐小程序

數(shù)獨大挑戰(zhàn)2018-06-03

數(shù)獨一種數(shù)學游戲,玩家需要根據(jù)9

答題星2018-06-03

您可以通過答題星輕松地創(chuàng)建試卷

全階人生考試2018-06-03

各種考試題,題庫,初中,高中,大學四六

運動步數(shù)有氧達人2018-06-03

記錄運動步數(shù),積累氧氣值。還可偷

每日養(yǎng)生app2018-06-03

每日養(yǎng)生,天天健康

體育訓練成績評定2018-06-03

通用課目體育訓練成績評定