字典應用:兩個陣列的交集II_Intersection of Two Arrays II_Leetcode #350

更新 發佈閱讀 3 分鐘

題目敘述 Intersection of Two Arrays II

給定兩個輸入陣列,請找出兩個陣列交集的元素,並且依照出現次數輸出。


測試範例

Example 1:

Input: nums1 = [1,2,2,1], nums2 = [2,2]
Output: [2,2]

交集元素:2
對應的出現次數[2,2]

Example 2:

Input: nums1 = [4,9,5], nums2 = [9,4,9,8,4]
Output: [4,9]
Explanation: [9,4] is also accepted.

交集元素:4,9
對應的出現次數[4,9]

約束條件

Constraints:

  • 1 <= nums1.length, nums2.length <= 1000

陣列長度介於1~1000之間。

  • 0 <= nums1[i], nums2[i] <= 1000

每個陣列元素介於0~1000之間。


觀察 交集 與 出現次數

交集就是兩個集合重疊的元素。

接著,可以用字典來記錄每個元素的出現次數。


演算法 用字典來記錄出現次數

先針對兩個輸入陣列建立對應的字典。

接著取交集,接著依照出現次數輸出對應的交集元素。


程式碼 用字典來記錄出現次數

from collections import Counter

class Solution:
def intersect(self, nums1: List[int], nums2: List[int]) -> List[int]:

# build number-occurence dictionary for nums1 and nums2
num_occ_dict_1, num_occ_dict_2 = map( Counter, [ nums1, nums2 ] )

# compute intersection
intersection = num_occ_dict_1 & num_occ_dict_2

# output intersection element with corresponding occurrences
return sum( ( [num]*occ for num, occ in intersection.items() ), [] )

複雜度分析

時間複雜度: O(m+n)

兩個陣列依序建立字典,所需時間為O(m)+O(n) = O(m+n)。


空間複雜度: O(m+n)

兩個陣列依序建立字典,所需空間亦為O(m)+O(n) = O(m+n)。


Reference

[1] Intersection of Two Arrays II - LeetCode

留言
avatar-img
小松鼠的演算法樂園
99會員
428內容數
由有業界實戰經驗的演算法工程師, 手把手教你建立解題的框架, 一步步寫出高效、清晰易懂的解題答案。 著重在讓讀者啟發思考、理解演算法,熟悉常見的演算法模板。 深入淺出地介紹題目背後所使用的演算法意義,融會貫通演算法與資料結構的應用。 在幾個經典的題目融入一道題目的多種解法,或者同一招解不同的題目,擴展廣度,並加深印象。
2024/10/06
題目敘述 Rank Transform of an Array 給定一個陣列arr,請根據數字的大小給予序號,序號值介於1~len( set(arr) )之間。 最大的數字給予最大的序號。 次大的數字給予次大的序號。 ...依此類推 最小的數字給予最小的序號1。
Thumbnail
2024/10/06
題目敘述 Rank Transform of an Array 給定一個陣列arr,請根據數字的大小給予序號,序號值介於1~len( set(arr) )之間。 最大的數字給予最大的序號。 次大的數字給予次大的序號。 ...依此類推 最小的數字給予最小的序號1。
Thumbnail
2024/10/01
題目敘述 Check If Array Pairs Are Divisible by k 給定一個長度為偶數的整數陣列arr,和一個整數k 。 我們想把陣列元素兩兩一組組成pair,使得每個pair的總和可以被k整除。 如果做得到,返回True。 如果不行,返回False。
Thumbnail
2024/10/01
題目敘述 Check If Array Pairs Are Divisible by k 給定一個長度為偶數的整數陣列arr,和一個整數k 。 我們想把陣列元素兩兩一組組成pair,使得每個pair的總和可以被k整除。 如果做得到,返回True。 如果不行,返回False。
Thumbnail
2024/09/29
My Calendar II 給定一個行事曆的class定義和行程安排的介面。 請完成下列function 1.建構子MyCalendarTwo() 2.boolean book(int start, int end) 在行事曆加入一項新行程,起始時間為start, 結束時間為end。
Thumbnail
2024/09/29
My Calendar II 給定一個行事曆的class定義和行程安排的介面。 請完成下列function 1.建構子MyCalendarTwo() 2.boolean book(int start, int end) 在行事曆加入一項新行程,起始時間為start, 結束時間為end。
Thumbnail
看更多
你可能也想看
Thumbnail
對於害怕風險、擔心賠錢的投資新手,本文介紹債券投資的優勢,說明其風險相對可控、能定期領息的特性,並介紹玉山「小額債」如何以低門檻(1,000美元/澳幣起)提供投資者參與海外債市的機會,強調其低波動、固定收益的友善特點,適合有明確時間目標的資金規劃。
Thumbnail
對於害怕風險、擔心賠錢的投資新手,本文介紹債券投資的優勢,說明其風險相對可控、能定期領息的特性,並介紹玉山「小額債」如何以低門檻(1,000美元/澳幣起)提供投資者參與海外債市的機會,強調其低波動、固定收益的友善特點,適合有明確時間目標的資金規劃。
Thumbnail
本文深入探討債券投資的本質、常見迷思、風險控制方法,並詳細介紹玉山證券「小額債」平臺的特色與優勢,包括低門檻、24hr即時報價、精準篩選等,幫助投資人建立理性、有紀律的債券投資策略,打造穩定的現金流,讓金錢成為財務上的助力。
Thumbnail
本文深入探討債券投資的本質、常見迷思、風險控制方法,並詳細介紹玉山證券「小額債」平臺的特色與優勢,包括低門檻、24hr即時報價、精準篩選等,幫助投資人建立理性、有紀律的債券投資策略,打造穩定的現金流,讓金錢成為財務上的助力。
Thumbnail
自由工作者收入不穩定,適合選擇穩健的小額債做資產配置。玉山證券小額債最低一千美金就能開始,支援 24 小時委託下單與即時報價,並提供多條件篩選找到適合的債券。本文分享我的操作體驗與為何小額債能成為自由工作者的安心配置。
Thumbnail
自由工作者收入不穩定,適合選擇穩健的小額債做資產配置。玉山證券小額債最低一千美金就能開始,支援 24 小時委託下單與即時報價,並提供多條件篩選找到適合的債券。本文分享我的操作體驗與為何小額債能成為自由工作者的安心配置。
Thumbnail
為什麼「小額債券」會成為越來越多人關注的選項? 如果你跟我一樣,經歷過股市大漲的甜、也嚐過劇烈修正的苦, 大概就會慢慢明白一件事—— 投資,不只是追求報酬,更是關於「穩定感」。 很多投資新手一開始進市場,很容易把全部資金都丟進股票, 漲的時候很快樂,跌的時候卻發現自己根本睡不好。 這
Thumbnail
為什麼「小額債券」會成為越來越多人關注的選項? 如果你跟我一樣,經歷過股市大漲的甜、也嚐過劇烈修正的苦, 大概就會慢慢明白一件事—— 投資,不只是追求報酬,更是關於「穩定感」。 很多投資新手一開始進市場,很容易把全部資金都丟進股票, 漲的時候很快樂,跌的時候卻發現自己根本睡不好。 這
Thumbnail
題目敘述 Make Two Arrays Equal by Reversing Subarrays 題目給定兩個輸入陣列,請問能否透過子陣列的反轉讓兩個陣列相等? 子陣列的反轉操作次數不受限制。 如果可以,返回True 如果不行,返回False
Thumbnail
題目敘述 Make Two Arrays Equal by Reversing Subarrays 題目給定兩個輸入陣列,請問能否透過子陣列的反轉讓兩個陣列相等? 子陣列的反轉操作次數不受限制。 如果可以,返回True 如果不行,返回False
Thumbnail
題目敘述 Intersection of Two Arrays II 給定兩個輸入陣列,請找出兩個陣列交集的元素,並且依照出現次數輸出。 測試範例 Example 1: Input: nums1 = [1,2,2,1], nums2 = [2,2] Output: [2,2] 交集元素
Thumbnail
題目敘述 Intersection of Two Arrays II 給定兩個輸入陣列,請找出兩個陣列交集的元素,並且依照出現次數輸出。 測試範例 Example 1: Input: nums1 = [1,2,2,1], nums2 = [2,2] Output: [2,2] 交集元素
Thumbnail
給定一個字串陣列,請把它們所共有的字元伴隨著出現次數輸出。這篇文章介紹如何使用字典統計出現次數,和字典取交集的方法來解決此問題。並提供了複雜度分析和關鍵知識點。
Thumbnail
給定一個字串陣列,請把它們所共有的字元伴隨著出現次數輸出。這篇文章介紹如何使用字典統計出現次數,和字典取交集的方法來解決此問題。並提供了複雜度分析和關鍵知識點。
Thumbnail
題目會給定一個陣列nums和一個目標值goal。計算子陣列總和=goal的數目有多少。演算法包含前綴和和字典的技巧,時間複雜度為O(n),空間複雜度為O(n)。
Thumbnail
題目會給定一個陣列nums和一個目標值goal。計算子陣列總和=goal的數目有多少。演算法包含前綴和和字典的技巧,時間複雜度為O(n),空間複雜度為O(n)。
Thumbnail
題目敘述 題目會給定我們一個二維陣列,要求我們計算內部元素相同的column row pairs總共有多少條? 註: pair的定義就是row i 和 column j 彼此內部元素值都相同,這樣就算一條pair。 題目的原文敘述 測試範例 Example 1: Input: gr
Thumbnail
題目敘述 題目會給定我們一個二維陣列,要求我們計算內部元素相同的column row pairs總共有多少條? 註: pair的定義就是row i 和 column j 彼此內部元素值都相同,這樣就算一條pair。 題目的原文敘述 測試範例 Example 1: Input: gr
Thumbnail
題目敘述 題目會給定我們兩個整數陣列作為輸入nums1, nums2,要求我們找出兩個陣列的差異值。 找出在nums1但是不在nums2的元素,以陣列的形式放在answer[0]輸出。 找出在nums2但是不在nums1的元素,以陣列的形式放在answer[1]輸出。 題目的原文敘述
Thumbnail
題目敘述 題目會給定我們兩個整數陣列作為輸入nums1, nums2,要求我們找出兩個陣列的差異值。 找出在nums1但是不在nums2的元素,以陣列的形式放在answer[0]輸出。 找出在nums2但是不在nums1的元素,以陣列的形式放在answer[1]輸出。 題目的原文敘述
Thumbnail
題目敘述 題目會給定我們兩個輸入字串word1, word2,要求我們依照word1,word2,word1,word2, ... 交叉前進的方式,合併兩個字串,作為輸出。 題目的原文敘述 測試範例 Example 1: Input: word1 = "abc", word2 = "pq
Thumbnail
題目敘述 題目會給定我們兩個輸入字串word1, word2,要求我們依照word1,word2,word1,word2, ... 交叉前進的方式,合併兩個字串,作為輸出。 題目的原文敘述 測試範例 Example 1: Input: word1 = "abc", word2 = "pq
Thumbnail
題目敘述 題目給定我們一個輸入陣列nums 要求我們以正、負交叉排列的方式重組陣列,並且必須保持原本的相對順序。 並且以陣列的形式輸出返回答案。 例[5, 1, -2, -3] 重排後為 [5, -2, 1, -3] 題目的原文敘述 測試範例 Example 1: Input:
Thumbnail
題目敘述 題目給定我們一個輸入陣列nums 要求我們以正、負交叉排列的方式重組陣列,並且必須保持原本的相對順序。 並且以陣列的形式輸出返回答案。 例[5, 1, -2, -3] 重排後為 [5, -2, 1, -3] 題目的原文敘述 測試範例 Example 1: Input:
追蹤感興趣的內容從 Google News 追蹤更多 vocus 的最新精選內容追蹤 Google News