Minimum flips of odd indexed elements from odd length subarrays to make two given arrays equal
Last Updated :
16 Sep, 2021
Given two binary arrays X[] and Y[] of size N, the task is to convert array X[] into array Y[] by minimum number of operations of selecting any subarray of odd length and flipping all odd-indexed elements from the subarray.
Examples:
Input: X[] = {1, 0, 0, 0, 0, 1}, Y[] = {1, 1, 0, 1, 1, 1}
Output: 2
Explanation:
Initially, X[] is {1, 0, 0, 0, 0, 1}.
Operation 1: Choose the sub-array {0, 0, 0} from array X[] and change the 2nd and 4th character and convert it to {1, 0, 1}.
Now X becomes {1, 1, 0, 1, 0, 1}.
Operation 2: Choose the sub-array {0} containing only the 5th character and convert it to 1.
Finally, X becomes {1, 1, 0, 1, 1, 1}, which is equal to Y.
Therefore, the count of operations is 2.
Input: X[] = {0, 1, 0}, Y[] = {0, 1, 0}
Output: 0
Explanation:
Since both the arrays X and Y are equal thus the minimum operations would be 0.
Approach: The idea is to count the operations for both even and odd positions individually. Follow the steps below to solve the problem:
- Initialize a variable C as 0 to store the count of operations.
- Traverse the array X[] elements over odd positions and take a counter count = 0.
- Check for consecutive unequal elements between X[i] and Y[i] and increase the counter count by 1 every time.
- When X[i] and Y[i] are equal increase a global C to increase operation by 1 since in that one operation all odd positions can be made equal to as in Y.
- Similarly, Traverse the array X[] elements over even positions and again take a counter count = 0.
- Check for consecutive unequal elements between X[i] and Y[i] and increase the counter count by 1 every time.
- When X[i] and Y[i] are equal increase a global counter C to increase operation by 1.
- After the above steps, print the value of C as the resultant count of operations required.
Below is the implementation of the above approach:
C++
#include <bits/stdc++.h>
using namespace std;
void minOperation( int X[], int Y[],
int n)
{
int C = 0;
int count = 0;
for ( int i = 1; i < n; i = i + 2) {
if (X[i] != Y[i]) {
count++;
}
else {
if (count != 0)
C++;
count = 0;
}
}
if (count != 0)
C++;
count = 0;
for ( int i = 0; i < n; i = i + 2) {
if (X[i] != Y[i]) {
count++;
}
else {
if (count != 0)
C++;
count = 0;
}
}
if (count != 0)
C++;
cout << C;
}
int main()
{
int X[] = { 1, 0, 0, 0, 0, 1 };
int Y[] = { 1, 1, 0, 1, 1, 1 };
int N = sizeof (X) / sizeof (X[0]);
minOperation(X, Y, N);
return 0;
}
|
Java
import java.util.*;
class GFG{
static void minOperation( int X[], int Y[],
int n)
{
int C = 0 ;
int count = 0 ;
for ( int i = 1 ; i < n; i = i + 2 )
{
if (X[i] != Y[i])
{
count++;
}
else
{
if (count != 0 )
C++;
count = 0 ;
}
}
if (count != 0 )
C++;
count = 0 ;
for ( int i = 0 ; i < n; i = i + 2 )
{
if (X[i] != Y[i])
{
count++;
}
else
{
if (count != 0 )
C++;
count = 0 ;
}
}
if (count != 0 )
C++;
System.out.print(C);
}
public static void main(String[] args)
{
int X[] = { 1 , 0 , 0 , 0 , 0 , 1 };
int Y[] = { 1 , 1 , 0 , 1 , 1 , 1 };
int N = X.length;
minOperation(X, Y, N);
}
}
|
Python3
def minOperation(X, Y, n):
C = 0 ;
count = 0 ;
for i in range ( 1 , n, 2 ):
if (X[i] ! = Y[i]):
count + = 1 ;
else :
if (count ! = 0 ):
C + = 1 ;
count = 0 ;
if (count ! = 0 ):
C + = 1 ;
count = 0 ;
for i in range ( 0 , n, 2 ):
if (X[i] ! = Y[i]):
count + = 1 ;
else :
if (count ! = 0 ):
C + = 1 ;
count = 0 ;
if (count ! = 0 ):
C + = 1 ;
print (C);
if __name__ = = '__main__' :
X = [ 1 , 0 , 0 , 0 , 0 , 1 ];
Y = [ 1 , 1 , 0 , 1 , 1 , 1 ];
N = len (X);
minOperation(X, Y, N);
|
C#
using System;
class GFG{
static void minOperation( int []X, int []Y,
int n)
{
int C = 0;
int count = 0;
for ( int i = 1; i < n; i = i + 2)
{
if (X[i] != Y[i])
{
count++;
}
else
{
if (count != 0)
C++;
count = 0;
}
}
if (count != 0)
C++;
count = 0;
for ( int i = 0; i < n; i = i + 2)
{
if (X[i] != Y[i])
{
count++;
}
else
{
if (count != 0)
C++;
count = 0;
}
}
if (count != 0)
C++;
Console.Write(C);
}
public static void Main(String[] args)
{
int []X = { 1, 0, 0, 0, 0, 1 };
int []Y = { 1, 1, 0, 1, 1, 1 };
int N = X.Length;
minOperation(X, Y, N);
}
}
|
Javascript
<script>
function minOperation(X, Y,
n)
{
let C = 0;
let count = 0;
for (let i = 1; i < n; i = i + 2)
{
if (X[i] != Y[i])
{
count++;
}
else
{
if (count != 0)
C++;
count = 0;
}
}
if (count != 0)
C++;
count = 0;
for (let i = 0; i < n; i = i + 2)
{
if (X[i] != Y[i])
{
count++;
}
else
{
if (count != 0)
C++;
count = 0;
}
}
if (count != 0)
C++;
document.write(C);
}
let X = [ 1, 0, 0, 0, 0, 1 ];
let Y = [ 1, 1, 0, 1, 1, 1 ];
let N = X.length;
minOperation(X, Y, N);
</script>
|
Time Complexity: O(N)
Auxiliary Space: O(1)
Share your thoughts in the comments
Please Login to comment...