Skip to content
Related Articles

Related Articles

Improve Article

Find an N-length Binary String having maximum sum of elements from given ranges

  • Last Updated : 22 Jul, 2021

Given an array of pairs ranges[] of size M and an integer N, the task is to find a binary string of length N such that the sum of elements of the string from the given ranges is maximum possible.

Examples: 
 

Input: N = 5, M = 3, ranges[] = {{1, 3}, {2, 4}, {2, 5}}
Output: 01100
Explanation:
Range [1, 3]: Freq of 0’s = 1, Freq of 1’s = 2. Sum = 1*2 = 2
Range [2, 4]: Freq of 0’s = 1, Freq of 1’s = 2. Sum = 1*2 = 2
Range [2, 5]: Freq of 0’s = 2, Freq of 1’s = 2. Sum = 2*2 = 4
Therefore, the required sum = 2 + 2 + 4 = 8, which is the maximum possible.

Input: N = 6, M = 1, ranges = {{1, 6}}
Output: 000111

 

 

Approach: The given problem can be solved by finding the absolute difference between the count of 0’s and the count of 1’s as small as possible for every range. Therefore, the idea is to place both i.e., 0 and 1 at an almost equal frequency in the string. The best way to do so is placing the 0s and 1s alternatively.



 

Hence, from the above observations, to generate the resultant string the idea is to iterate over the range [1, N] using the variable i and if the value of i is odd, then print 0, otherwise print 1.

 

Below is the implementation of the above approach.

 

C++




// C++ program for the above approach
 
#include <bits/stdc++.h>
using namespace std;
 
// Function to find an N-length binary
// string having maximum sum of
// elements from all given ranges
void printBinaryString(int arr[][3], int N)
{
    // Iterate over the range [1, N]
    for (int i = 1; i <= N; i++) {
 
        // If i is odd, then print 0
        if (i % 2) {
            cout << 0;
        }
 
        // Otherwise, print 1
        else {
            cout << 1;
        }
    }
}
 
// Driver Code
int main()
{
    int N = 5, M = 3;
    int arr[][3] = { { 1, 3 },
                     { 2, 4 },
                     { 2, 5 } };
 
    // Function Call
    printBinaryString(arr, N);
 
    return 0;
}

Java




// Java program for the above approach
import java.io.*;
 
class GFG
{
   
  // Function to find an N-length binary
// string having maximum sum of
// elements from all given ranges
static void printBinaryString(int arr[][], int N)
{
   
    // Iterate over the range [1, N]
    for (int i = 1; i <= N; i++) {
 
        // If i is odd, then print 0
        if (i % 2 == 1) {
             System.out.print(0);
        }
 
        // Otherwise, print 1
        else {
            System.out.print(1);
        }
    }
}
 
// Driver Code
    public static void main (String[] args) {
        int N = 5, M = 3;
    int arr[][] = { { 1, 3 },
                     { 2, 4 },
                     { 2, 5 } };
 
    // Function Call
    printBinaryString(arr, N);
    }
}
 
// This code is contributed by Lokeshpotta20.

Python3




# Python program for the above approach
 
# Function to find an N-length binary
# string having maximum sum of
# elements from all given ranges
def printBinaryString(arr, N):
    # Iterate over the range [1, N]
    for i in range(1, N + 1):
 
        # If i is odd, then print 0
        if (i % 2):
            print(0, end="");
 
        # Otherwise, print 1
        else:
            print(1, end="");
 
 
# Driver Code
N = 5;
M = 3;
arr = [ [ 1, 3 ], [ 2, 4 ], [ 2, 5 ] ];
 
# Function Call
printBinaryString(arr, N);
 
# This code is contributed by _saurabh_jaiswal.

C#




// C# program for the above approach
using System;
using System.Collections.Generic;
 
class GFG{
 
// Function to find an N-length binary
// string having maximum sum of
// elements from all given ranges
static void printBinaryString(int [,]arr, int N)
{
   
    // Iterate over the range [1, N]
    for (int i = 1; i <= N; i++) {
 
        // If i is odd, then print 0
        if (i % 2 == 1) {
           Console.Write(0);
        }
 
        // Otherwise, print 1
        else {
            Console.Write(1);
        }
    }
}
 
// Driver Code
public static void Main()
{
    int N = 5;
    int [,]arr = { { 1, 3 },
                     { 2, 4 },
                     { 2, 5 } };
 
    // Function Call
    printBinaryString(arr, N);
}
}
 
// This code is contributed by ipg2016107.

Javascript




<script>
// Javascript program for the above approach
 
// Function to find an N-length binary
// string having maximum sum of
// elements from all given ranges
function printBinaryString(arr, N)
{
    // Iterate over the range [1, N]
    for (let i = 1; i <= N; i++) {
 
        // If i is odd, then print 0
        if (i % 2) {
            document.write(0);
        }
 
        // Otherwise, print 1
        else {
            document.write(1);
        }
    }
}
 
// Driver Code
    let N = 5, M = 3;
    let arr = [ [ 1, 3 ],
                     [ 2, 4 ],
                     [ 2, 5 ] ];
 
    // Function Call
    printBinaryString(arr, N);
 
// This code is contributed by subhammahato348.
</script>
Output: 
01010

 

Time Complexity: O(N)
Auxiliary Space: O(1)

Attention reader! Don’t stop learning now. Get hold of all the important mathematical concepts for competitive programming with the Essential Maths for CP Course at a student-friendly price. To complete your preparation from learning a language to DS Algo and many more,  please refer Complete Interview Preparation Course.




My Personal Notes arrow_drop_up
Recommended Articles
Page :