Skip to content
Related Articles

Related Articles

Improve Article
Save Article
Like Article

Python3 Program to Maximize count of corresponding same elements in given Arrays by Rotation

  • Last Updated : 25 Jan, 2022

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:
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:
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: 
 

  1. Store the position of all the elements of the array arr2[] in an array(say store[]).
  2. 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.
  3. 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
Output: 
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!


My Personal Notes arrow_drop_up
Recommended Articles
Page :

Start Your Coding Journey Now!