1. 程式人生 > 其它 >QFNU-ACM 2021.10.09 Rating補題

QFNU-ACM 2021.10.09 Rating補題

題目:https://leetcode-cn.com/problems/intersection-of-two-arrays-ii/

分析:這道題與349類似,只是要元素可以出現重複,所有考慮使用"multiset";還可以考慮使用“排序+雙指標”。

程式碼1:

C++版本:
vector<int> intersect(vector<int>& nums1, vector<int>& nums2) {
    multiset<int> s1(nums1.begin(), nums1.end());
    multiset<int
> s2; for (auto& num : nums2) { if (s1.find(num) != s1.end()){ s2.insert(num); s1.erase(s1.lower_bound(num)); } } return vector<int> (s2.begin(), s2.end()); }

知識點:

1、在multimap和multiset中查詢元素:https://blog.csdn.net/jasonLee_lijiaqi/article/details/78596763

2、multiset用法總結:https://blog.csdn.net/sodacoco/article/details/84798621

程式碼2:

C++版本:
vector<int> intersect1(vector<int>& nums1, vector<int>& nums2) {
    sort(nums1.begin(), nums1.end());
    sort(nums2.begin(), nums2.end());
    int i = 0, j = 0;
    vector<int> result;
    
while (i < nums1.size() && j < nums2.size()) { if (nums1[i] == nums2[j]) { result.push_back(nums1[i]); i++; j++; } else if (nums1[i] < nums2[j]) i++; else if (nums1[i] > nums2[j]) j++; } return result; }