大家好
這次要講的題目是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;
}
};
沒有留言:
張貼留言