Minimize Bitwise XOR of array elements with 1 required to make sum of array at least K
Last Updated :
18 May, 2021
Given an array arr[] consisting of N positive integers and a positive integer K, the task is to count minimum Bitwise XOR of array elements with 1 required such that the sum of the array is at least K.
Examples:
Input: arr[] = {0, 1, 1, 0, 1}, K = 4
Output: 1
Explanation: Performing Bitwise XOR of arr[0] and 1 modifies arr[] to {1, 1, 1, 0, 1}. Now, the sum of array = 1 + 1 + 1 + 0 + 1 = 4(= K).
Input: arr[] = {14, 0, 1, 0}, K = 20
Output: -1
Approach: The given problem can be solved using the fact that Bitwise XOR of 1 with an even element increases the element by 1.
Follow the steps below to solve the problem:
Below is the implementation of the above approach:
C++
#include <bits/stdc++.h>
using namespace std;
int minStepK( int arr[], int N, int K)
{
int E = 0;
int S = 0;
for ( int i = 0; i < N; i++) {
S += arr[i];
if (arr[i] % 2 == 0)
E += 1;
}
if (S >= K)
return 0;
else if (S + E < K)
return -1;
else
return K - S;
}
int main()
{
int arr[] = { 0, 1, 1, 0, 1 };
int N = sizeof (arr) / sizeof (arr[0]);
int K = 4;
cout << minStepK(arr, N, K);
return 0;
}
|
Java
import java.util.*;
class GFG{
static int minStepK( int arr[], int N, int K)
{
int E = 0 ;
int S = 0 ;
for ( int i = 0 ; i < N; i++)
{
S += arr[i];
if (arr[i] % 2 == 0 )
E += 1 ;
}
if (S >= K)
return 0 ;
else if (S + E < K)
return - 1 ;
else
return K - S;
}
public static void main(String[] args)
{
int arr[] = { 0 , 1 , 1 , 0 , 1 };
int N = arr.length;
int K = 4 ;
System.out.println(minStepK(arr, N, K));
}
}
|
Python3
def minStepK(arr, N, K):
E = 0
S = 0
for i in range (N):
S + = arr[i]
if (arr[i] % 2 = = 0 ):
E + = 1
if (S > = K):
return 0
elif (S + E < K):
return - 1
else :
return K - S
if __name__ = = "__main__" :
arr = [ 0 , 1 , 1 , 0 , 1 ]
N = len (arr)
K = 4
print (minStepK(arr, N, K))
|
C#
using System;
class GFG
{
static int minStepK( int [] arr, int N, int K)
{
int E = 0;
int S = 0;
for ( int i = 0; i < N; i++)
{
S += arr[i];
if (arr[i] % 2 == 0)
E += 1;
}
if (S >= K)
return 0;
else if (S + E < K)
return -1;
else
return K - S;
}
public static void Main()
{
int [] arr= { 0, 1, 1, 0, 1 };
int N = arr.Length;
int K = 4;
Console.WriteLine(minStepK(arr, N, K));
}
}
|
Javascript
<script>
function minStepK(arr, N, K)
{
var E = 0;
var S = 0;
for ( var i = 0; i < N; i++)
{
S += arr[i];
if (arr[i] % 2 === 0)
E += 1;
}
if (S >= K)
return 0;
else if (S + E < K)
return -1;
else
return K - S;
}
var arr = [ 0, 1, 1, 0, 1 ];
var N = arr.length;
var K = 4;
document.write(minStepK(arr, N, K));
</script>
|
Time Complexity: O(N)
Auxiliary Space: O(1)
Share your thoughts in the comments
Please Login to comment...