Intersection of Two Arrays

Find the intersection of two arrays.

Example:

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

Approach

Java

import java.util.Arrays;
import java.util.HashSet;

public class IntersectionofTwoArrays {
    public static void main(String[] args) {
        int nums1[] = { 495 };
        int nums2[] = { 94984 };
        int intsec[] = intSecTwoArray(nums1, nums2);
        System.out.println(Arrays.toString(intsec));
    }

    private static int[] intSecTwoArray(int[] nums1int[] nums2) {
        // first array length
        int fl1 = nums1.length;
        // second array length
        int sl2 = nums2.length;
        // define pointer
        int f = 0, s = 0;
        HashSet<Integerset = new HashSet<>();
        // sort the both array
        Arrays.sort(nums1);
        Arrays.sort(nums2);
        // two-pointer approach
        while (fl1 > f && sl2 > s) {
            // if both equals
            if (nums1[f] == nums2[s]) {
                set.add(nums1[f]);
                f++;
                s++;
            } else if (nums1[f] > nums2[s]) {
                s++;
            } else if (nums1[f] < nums2[s]) {
                f++;
            }
        }
        // set to array
        int result[] = set.stream().mapToInt(Number::intValue).toArray();
        return result;
    }
}

C++

#include <bits/stdc++.h>
using namespace std;

//function to find the intersection of two
//arrays
vector<intintersection(vector<int>& nums1vector<int>& nums2
{
       //vector to hold the final result
        vector<intres;
        int n=nums1.size();
        int m=nums2.size();

        //sort both the arays
        sort(nums1.begin(),nums1.end());
        sort(nums2.begin(),nums2.end());
        int i=0,j=0;
        set<intst;

        //now iterate for all all elements
        while(i<n && j<m)
        {

            //if both are same then push into the set
            if(nums1[i]==nums2[j])
            {
                st.insert(nums1[i]);
                i++;
                j++;
            }
          //else if nums[i]<nums[j] then move 
          //first to the next position
            else if(nums1[i]<nums2[j])
                  i++;
          //else move second to next point
            else if(nums1[i]>nums2[j])
                   j++;
        }
    for(auto it=st.begin();it!=st.end();it++)
           res.push_back(*it);
        sort(res.begin(),res.end());
        return res;
}
int main()
{
  vector<intnums1={1,2,2,1};
  vector<intnums2={2,2};
  vector<intinter=intersection(nums1,nums2);
  for(int i=0;i<inter.size();i++)
     cout<<inter[i]<<" ";
}


No comments:

Post a Comment