LeetCode 349 Intersection of Two Arrays

題目

Given two arrays, write a function to compute their intersection.

Example 1:

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

Example 2:

Input: nums1 = [4,9,5], nums2 = [9,4,9,8,4]
Output: [9,4]

Note:
Each element in the result must be unique.
The result can be in any order.


解法思路

  • 先對 nums1 去重崩侠,然后在和 nums2 取交集坷檩;

解法實現(一)使用基于平衡二叉樹實現的 TreeSet

  • 對于 nums1 來說矢炼,和 nums2 重復的元素要“移動”到交集中;
關鍵詞

Set TreeSet

時間復雜度
  • O(NlogN);
  • 標準庫中的 Set 是基于平衡的二叉樹實現的阵赠,其時間復雜度為 O(logN);
空間復雜度
  • O(N)匕荸;
class Solution {
    
    public int[] intersection(int[] nums1, int[] nums2) {
        TreeSet<Integer> set = new TreeSet();
        for (int num : nums1) {
            set.add(num);
        }

        ArrayList<Integer> list = new ArrayList<>();
        for (int num : nums2) {
            if (set.contains(num)) {
                list.add(num);
                set.remove(num);
            }
        }

        int[] res = new int[list.size()];
        for (int i = 0; i < list.size(); i++) {
            res[i] = list.get(i);
        }
        return res;
    }
    
}

解法實現(二)使用基于哈希表實現的 HashSet

時間復雜度
  • O(len(nums1)+len(nums2))榛搔;
空間復雜度
  • O(len(nums1))东揣;
關鍵詞

Set HashSet

import java.util.HashSet;

// 349. Intersection of Two Arrays
// https://leetcode.com/problems/intersection-of-two-arrays/description/
// 時間復雜度: O(len(nums1)+len(nums2))
// 空間復雜度: O(len(nums1))
public class Solution349 {

    public int[] intersection(int[] nums1, int[] nums2) {

        HashSet<Integer> record = new HashSet<Integer>();
        for(int num: nums1)
            record.add(num);

        HashSet<Integer> resultSet = new HashSet<Integer>();
        for(int num: nums2)
            if(record.contains(num))
                resultSet.add(num);

        int[] res = new int[resultSet.size()];
        int index = 0;
        for(Integer num: resultSet)
            res[index++] = num;

        return res;
    }

    private static void printArr(int[] arr){
        for(int e: arr)
            System.out.print(e + " ");
        System.out.println();
    }

    public static void main(String[] args) {

        int[] nums1 = {1, 2, 2, 1};
        int[] nums2 = {2, 2};
        int[] res = (new Solution349()).intersection(nums1, nums2);
        printArr(res);
    }
}

返回 LeetCode [Java] 目錄

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯(lián)系作者
  • 序言:七十年代末尔觉,一起剝皮案震驚了整個濱河市芥吟,隨后出現的幾起案子钟鸵,更是在濱河造成了極大的恐慌,老刑警劉巖棺耍,帶你破解...
    沈念sama閱讀 217,907評論 6 506
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現場離奇詭異缸托,居然都是意外死亡瘾蛋,警方通過查閱死者的電腦和手機,發(fā)現死者居然都...
    沈念sama閱讀 92,987評論 3 395
  • 文/潘曉璐 我一進店門佩抹,熙熙樓的掌柜王于貴愁眉苦臉地迎上來棍苹,“玉大人茵汰,你說我怎么就攤上這事±覆颍” “怎么了豆胸?”我有些...
    開封第一講書人閱讀 164,298評論 0 354
  • 文/不壞的土叔 我叫張陵,是天一觀的道長灵奖。 經常有香客問我瓷患,道長,這世上最難降的妖魔是什么尉尾? 我笑而不...
    開封第一講書人閱讀 58,586評論 1 293
  • 正文 為了忘掉前任沙咏,我火速辦了婚禮班套,結果婚禮上,老公的妹妹穿的比我還像新娘吱韭。我一直安慰自己鱼的,他們只是感情好痘煤,可當我...
    茶點故事閱讀 67,633評論 6 392
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著宙橱,像睡著了一般师郑。 火紅的嫁衣襯著肌膚如雪调窍。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 51,488評論 1 302
  • 那天地梨,我揣著相機與錄音缔恳,去河邊找鬼褐耳。 笑死渴庆,一個胖子當著我的面吹牛,可吹牛的內容都是我干的刃滓。 我是一名探鬼主播耸弄,決...
    沈念sama閱讀 40,275評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼计呈,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了茁彭?” 一聲冷哼從身側響起扶歪,我...
    開封第一講書人閱讀 39,176評論 0 276
  • 序言:老撾萬榮一對情侶失蹤妹萨,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后乎完,有當地人在樹林里發(fā)現了一具尸體,經...
    沈念sama閱讀 45,619評論 1 314
  • 正文 獨居荒郊野嶺守林人離奇死亡霍弹,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 37,819評論 3 336
  • 正文 我和宋清朗相戀三年娃弓,在試婚紗的時候發(fā)現自己被綠了。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片耍缴。...
    茶點故事閱讀 39,932評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡挽霉,死狀恐怖防嗡,靈堂內的尸體忽然破棺而出,到底是詐尸還是另有隱情侠坎,我是刑警寧澤蚁趁,帶...
    沈念sama閱讀 35,655評論 5 346
  • 正文 年R本政府宣布,位于F島的核電站实胸,受9級特大地震影響他嫡,放射性物質發(fā)生泄漏。R本人自食惡果不足惜庐完,卻給世界環(huán)境...
    茶點故事閱讀 41,265評論 3 329
  • 文/蒙蒙 一钢属、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧门躯,春花似錦淆党、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,871評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至懂讯,卻和暖如春慕匠,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背域醇。 一陣腳步聲響...
    開封第一講書人閱讀 32,994評論 1 269
  • 我被黑心中介騙來泰國打工酪呻, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留玩荠,地道東北人。 一個月前我還...
    沈念sama閱讀 48,095評論 3 370
  • 正文 我出身青樓女坑,卻偏偏與公主長得像,于是被迫代替她去往敵國和親碉就。 傳聞我的和親對象是個殘疾皇子瓮钥,可洞房花燭夜當晚...
    茶點故事閱讀 44,884評論 2 354