2017年4月17日 星期一

[Leetcode C++解析] 350. Intersection of Two Arrays II

大家好
這次要講的題目是Intersection of Two Arrays II
題目網址 https://leetcode.com/problems/intersection-of-two-arrays-ii/#/description

這一題大致上算是簡單的題目
不過他的題目說明沒有很清楚
一開始誤解了他的意思
在此稍微說明一下:
給你兩個陣列
希望你可以找出兩陣列之中的交集
並且不要求輸出結果的順序

舉例來說
陣列#1 : [1 3 5 7 9]
陣列#2 : [7 3 5 2]
答案為 [3 5 7]或[3 7 5]或[5 3 7]或[5 7 3]或[7 5 3]或[7 3 5] (就是不要求答案的順序)

《以下是我的解題方式》

因為不要求答案順序
因此將兩個input陣列先進行排序
以上面的舉例來說...
陣列#1 : [1 3 5 7 9]
陣列#2 : [2 3 5 7]

這樣的話只要從頭開始兩兩比較一下
把相同的數值放入存答案的陣列
最後再輸出即可

《曾經錯過的測資》
陣列#1 : [1]
陣列#2 : []
→要注意有空陣列的時候要怎麼處理
《程式碼在這》
【小提醒:盡量自己先參考上面的想法寫出來,這樣比較不會有背程式碼的概念】


class Solution {
public:
    /**
     * @param nums1 an integer array
     * @param nums2 an integer array
     * @return an integer array
     */
    vector<int> intersect(vector<int>& nums1, vector<int>& nums2) {
        // Write your code here
        sort(nums1.begin(),nums1.end());
        sort(nums2.begin(),nums2.end());
     
        vector<int> res;
        res.clear();
        for(int i=0,j=0;i<nums1.size() && j<nums2.size();){
            if(nums1[i] > nums2[j]) ++j;
            else if(nums1[i] < nums2[j]) ++i;
            else {
                res.push_back(nums1[i]);
                ++i;++j;
            }
        }
        return res;
    }
};

沒有留言:

張貼留言