Given two sorted arrays of distinct elements, we need to print those elements from both arrays that are not common. The output should be printed in sorted order.
Examples :
Input : arr1[] = {10, 20, 30}
arr2[] = {20, 25, 30, 40, 50}
Output : 10 25 40 50
We do not print 20 and 30 as these
elements are present in both arrays.
Input : arr1[] = {10, 20, 30}
arr2[] = {40, 50}
Output : 10 20 30 40 50
Method 1:
The idea is based on the merge process of merge sort. We traverse both arrays and skip common elements.
Python3
def printUncommon(arr1, arr2, n1, n2):
i = 0
j = 0
k = 0
while (i < n1 and j < n2):
if (arr1[i] < arr2[j]):
print (arr1[i], end = " " )
i = i + 1
k = k + 1
elif (arr2[j] < arr1[i]):
print (arr2[j], end = " " )
k = k + 1
j = j + 1
else :
i = i + 1
j = j + 1
while (i < n1):
print (arr1[i], end = " " )
i = i + 1
k = k + 1
while (j < n2):
print (arr2[j], end = " " )
j = j + 1
k = k + 1
arr1 = [ 10 , 20 , 30 ]
arr2 = [ 20 , 25 , 30 , 40 , 50 ]
n1 = len (arr1)
n2 = len (arr2)
printUncommon(arr1, arr2, n1, n2)
|
Time Complexity: O(n1 + n2), where n1 and n2 represents the size of the given two arrays.
Auxiliary Space: O(1), no extra space is required, so it is a constant.
Method 2: Using Counter() function
Python3
from collections import Counter
def printUncommon(arr1, arr2):
frequency_arr1 = Counter(arr1)
frequency_arr2 = Counter(arr2)
result = []
for key in frequency_arr1:
if key not in frequency_arr2:
result.append(key)
for key in frequency_arr2:
if key not in frequency_arr1:
result.append(key)
result.sort()
for i in result:
print (i, end = ' ' )
arr1 = [ 10 , 20 , 30 ]
arr2 = [ 20 , 25 , 30 , 40 , 50 ]
printUncommon(arr1, arr2)
|
Please refer complete article on Print uncommon elements from two sorted arrays for more details!
Time Complexity: O(n*logn), as sort() function is used.
Auxiliary Space : O(n), where n is length of result list.
Method 3: using operator.countOf() method
Python3
import operator as op
def printUncommon(arr1, arr2):
result = []
for key in arr1:
if op.countOf(arr2, key) = = 0 :
result.append(key)
for key in arr2:
if op.countOf(arr1, key) = = 0 :
result.append(key)
result.sort()
for i in result:
print (i, end = ' ' )
arr1 = [ 10 , 20 , 30 ]
arr2 = [ 20 , 25 , 30 , 40 , 50 ]
printUncommon(arr1, arr2)
|
Time Complexity: O(NLogN)
Auxiliary Space : O(N)