Table of Contents
Problem Statement
In the “Minimum number of Merge Operations to make an Array Palindrome” problem we have given an array “a[]”. Find the minimum number of merge_operations are required to make an array palindrome. Note, A palindrome is a word, phrase, or sequence that reads the same backward as forwards.
Input Format
The first line containing an integer n.
Second-line containing n integer separated by space(” “).
Output Format
The first and only one line containing an integer value which denotes the minimum number of merge_operations to make an array palindrome.
Constraints
- 1<=n<=10^5
- 1<=a[i]<=10^6
Example
5 23 45 65 45 23
0
Explanation: Given array is already a palindrome, So the number of operations took is 0.
4 1 7 9 1
1
Explanation: Number of merge operations are 1. mereging 7, 9 makes the array palindrome.
5 1 3 8 6 1
2
Here the minimum number of merge operations took is 2 to make it a palindrome.
Algorithm
1. Create two variables i,j. i will point to the start of the array and j to the end.
Till i less then or equal to j
- If arr[i] = arr[j], then there is no need to merge the elements. Increment i and decrement j
- If arr[i] > arr[j], then do merge operation at index j ie, arr[j-1] = arr[j-1] + arr[j], decrement j and increment the no of merge operations count by 1
- If arr[i] < arr[j], then do merge operation at index i ie, arr[i+1] = arr[i+1] + arr[i], increment i and increment the no of merge operations count by 1.
Implementation
C++ Program for Minimum number of Merge Operations to make an Array Palindrome
#include <bits/stdc++.h>
using namespace std;
int main()
{
int n;
cin>>n;
int a[n];
for(int i=0;i<n;i++)
{
cin>>a[i];
}
int ans = 0;
for (int i=0,j=n-1; i<=j;)
{
if(a[i]==a[j])
{
i++;
j--;
}
else if(a[i]>a[j])
{
j--;
a[j]+=a[j+1] ;
ans++;
}
else
{
i++;
a[i]+=a[i-1];
ans++;
}
}
cout<<ans<<endl;
return 0;
}
Java Program for Minimum number of Merge Operations to make an Array Palindrome
import java.util.Scanner;
class sum
{
public static void main(String[] args)
{
Scanner sr = new Scanner(System.in);
int n=sr.nextInt();
int a[]= new int[n];
for(int i=0;i<n;i++)
{
a[i]=sr.nextInt();
}
int ans = 0;
for (int i=0,j=n-1; i<=j;)
{
if(a[i]==a[j])
{
i++;
j--;
}
else if(a[i]>a[j])
{
j--;
a[j]+=a[j+1] ;
ans++;
}
else
{
i++;
a[i]+.
=a[i-1];
ans++;
}
}
System.out.println(ans);
}
}
7 1 2 3 5 3 2 4
4
Complexity Analysis
Time Complexity
O(n) where n is the size of the given array. Here we visit the array once and find the desired answer.
Space Complexity
O(1) because we don’t declare any auxiliary space here.