Intersection of Two Arrays II

Find the intersection of two arrays. Each element in the result should appear as many times as it shows in both arrays.

Example:

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

Approach

Java

import java.util.ArrayList;
import java.util.Arrays;

public class IntersectionofTwoArraysII {
    public static void main(String[] args) {
        int nums1[] = { 495,9 };
        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;
        ArrayList<Integerset = new ArrayList<>();
        // 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<intintersect(vector<int>& nums1vector<int>& nums2
{
    int n=nums1.size();
    int m=nums2.size();

    //sort both the arrays
    sort(nums1.begin(),nums1.end());
    sort(nums2.begin(),nums2.end());
    int i=0,j=0;
    vector<intres;

    //ietare till the end of the arrays
    while(i<n && j<m)
        {

            //if both are sam then
            //push into the result
            if(nums1[i]==nums2[j])
            {
                res.push_back(nums1[i]);
                i++;
                j++;
            }

            //if fisrt is smaller then move first 
            //to next position
            else if(nums1[i]<nums2[j])
                  i++;

             //else move second to the next position
            else if(nums1[i]>nums2[j])
                   j++;
        }
        return res;
}
int main()
{
  vector<intnums1={1,2,2,1};
  vector<intnums2={2,2};
  vector<intinter=intersect(nums1,nums2);
  for(int i=0;i<inter.size();i++)
     cout<<inter[i]<<" ";
}


No comments:

Post a Comment