Python3 Program to Maximize count of corresponding same elements in given Arrays by Rotation
Given two arrays arr1[] and arr2[] of N integers and array arr1[] has distinct elements. The task is to find the maximum count of corresponding same elements in the given arrays by performing cyclic left or right shift on array arr1[].
Examples:
Input: arr1[] = { 6, 7, 3, 9, 5 }, arr2[] = { 7, 3, 9, 5, 6 }
Output: 5
Explanation:
By performing cyclic left shift on array arr1[] by 1.
Updated array arr1[] = {7, 3, 9, 5, 6}.
This rotation contains a maximum number of equal elements between array arr1[] and arr2[].
Input: arr1[] = {1, 3, 2, 4}, arr2[] = {4, 2, 3, 1}
Output: 2
Explanation:
By performing cyclic left shift on array arr1[] by 1.
Updated array arr1[] = {3, 2, 4, 1}
This rotation contains a maximum number of equal elements between array arr1[] and arr2[].
Approach: This problem can be solved using Greedy Approach. Below are the steps:
- Store the position of all the elements of the array arr2[] in an array(say store[]).
- For each element in the array arr1[], do the following:
- Find the difference(say diff) between the position of the current element in arr2[] with the position in arr1[].
- If diff is less than 0 then update diff to (N – diff).
- Store the frequency of current difference diff in a map.
- After the above steps, the maximum frequency stored in map is the maximum number of equal elements after rotation on arr1[].
Below is the implementation of the above approach:
Python3
# Python3 program for the above approach # Function that prints maximum # equal elements def maximumEqual(a, b, n): # List to store the index # of elements of array b store = [ 0 ] * 10 * * 5 # Storing the positions of # array B for i in range (n): store[b[i]] = i + 1 # Frequency array to keep count # of elements with similar # difference in distances ans = [ 0 ] * 10 * * 5 # Iterate through all element # in arr1[] for i in range (n): # Calculate number of shift # required to make current # element equal d = abs (store[a[i]] - (i + 1 )) # If d is less than 0 if (store[a[i]] < i + 1 ): d = n - d # Store the frequency # of current diff ans[d] + = 1 finalans = 0 # Compute the maximum frequency # stored for i in range ( 10 * * 5 ): finalans = max (finalans, ans[i]) # Printing the maximum number # of equal elements print (finalans) # Driver Code if __name__ = = '__main__' : # Given two arrays A = [ 6 , 7 , 3 , 9 , 5 ] B = [ 7 , 3 , 9 , 5 , 6 ] size = len (A) # Function Call maximumEqual(A, B, size) # This code is contributed by Shivam Singh |
5
Time Complexity: O(N)
Auxiliary Space: O(N)
Please refer complete article on Maximize count of corresponding same elements in given Arrays by Rotation for more details!