How to check if two arrays can be made equal by swapping pairs of one of the arrays in C++

Given two binary arrays arr1[] and arr2[] of the same size, the task is to make both the arrays equal by swapping pairs of arr1[ ] only if arr1[i] = 0 and arr1[j] = 1 (0 ≤ i < j < N)). If it is possible to make both the arrays equal, print “Yes”. Otherwise, print “No”.

Examples:

Input: arr1[] = {0, 0, 1, 1}, arr2[] = {1, 1, 0, 0}
Output: Yes
Explanation:
Swap arr1[1] and arr1[3], it becomes arr1[] = {0, 1, 1, 0}.
Swap arr1[0] and arr1[2], it becomes arr1[] = {1, 1, 0, 0}.

Input: arr1[] = {1, 0, 1, 0, 1}, arr2[] = {0, 1, 0, 0, 1}
Output: No

Approach: Follow the steps below to solve the problem:

  • Initialize two variable, say count and flag (= true).
  • Traverse the array and for every array element, perform the following operations:
    • If arr1[i] != arr2[i]:
      • If arr1[i] == 0, increment count by 1.
      • Otherwise, decrement count by and if count < 0, update flag = false.
  • If flag is equal to true, print “Yes”. Otherwise, print “No”.

Below is the implementation of the above approach:

// C++ program for above approach

#include <bits/stdc++.h>
using namespace std;

// Function to check if two arrays
// can be made equal or not by swapping
// pairs of only one of the arrays
void checkArrays(int arr1[], int arr2[], int N)
{
	// Stores elements required
	// to be replaced
	int count = 0;

	// To check if the arrays
	// can be made equal or not
	bool flag = true;

	// Traverse the array
	for (int i = 0; i < N; i++) {

		// If array elements are not equal
		if (arr1[i] != arr2[i]) {

			if (arr1[i] == 0)

				// Increment count by 1
				count++;
			else {

				// Decrement count by 1
				count--;
				if (count < 0) {
					flag = 0;
					break;
				}
			}
		}
	}

	// If flag is true and count is 0,
	// print "Yes". Otherwise "No"
	if (flag && count == 0)
		cout << "Yes" << endl;
	else
		cout << "No" << endl;
}

// Driver Code
int main()
{
	// Given arrays
	int arr1[] = { 0, 0, 1, 1 };
	int arr2[] = { 1, 1, 0, 0 };

	// Size of the array
	int N = sizeof(arr1) / sizeof(arr1[0]);
	checkArrays(arr1, arr2, N);

	return 0;
}

Output: 

Yes

 

Submit Your Programming Assignment Details