Minimum number of sets with numbers less than Y (original) (raw)

Last Updated : 16 Jun, 2022

Given a string of consecutive digits and a number Y, the task is to find the number of minimum sets such that every set follows the below rule:

  1. Set should contain consecutive numbers
  2. No digit can be used more than once.
  3. The number in the set should not be more than Y.

Examples:

Input: s = "1234", Y = 30
Output: 3 Three sets of {12, 3, 4}

Input: s = "1234", Y = 4 Output: 4 Four sets of {1}, {2}, {3}, {4}

Approach: The following problem can be solved using a greedy approach whose steps are given below:

Below is the implementation of the above approach:

C++ `

// C++ program to find the minimum number // sets with consecutive numbers and less than Y #include <bits/stdc++.h> using namespace std;

// Function to find the minimum number of shets int minimumSets(string s, int y) {

// Variable to count
// the number of sets
int cnt = 0;
int num = 0;

int l = s.length();
int f = 0;

// Iterate in the string
for (int i = 0; i < l; i++) {

    // Add the number to string
    num = num * 10 + (s[i] - '0');

    // Mark that we got a number
    if (num <= y)
        f = 1;
    else // Every time it exceeds
    {

        // Check if previous was
        // anytime  less than Y
        if (f)
            cnt += 1;

        // Current number
        num = s[i] - '0';
        f = 0;

        // Check for current number
        if (num <= y)
            f = 1;
        else
            num = 0;
    }
}

// Check for last added number
if (f)
    cnt += 1;

return cnt;

}

// Driver Code int main() { string s = "1234"; int y = 30; cout << minimumSets(s, y);

return 0; }

Java

// Java program to find the minimum number // sets with consecutive numbers and less than Y import java.util.*;

class solution {

// Function to find the minimum number of shets static int minimumSets(String s, int y) {

// Variable to count
// the number of sets
int cnt = 0;
int num = 0;

int l = s.length();
boolean f = false;

// Iterate in the string
for (int i = 0; i < l; i++) {

    // Add the number to string
    num = num * 10 + (s.charAt(i) - '0');

    // Mark that we got a number
    if (num <= y)
        f = true;
    else // Every time it exceeds
    {

        // Check if previous was
        // anytime less than Y
        if (f)
            cnt += 1;

        // Current number
        num = s.charAt(i) - '0';
        f = false;

        // Check for current number
        if (num <= y)
            f = true;
        else
            num = 0;
    }
}

// Check for last added number
if (f == true)
    cnt += 1;

return cnt;

}

// Driver Code public static void main(String args[]) { String s = "1234"; int y = 30; System.out.println(minimumSets(s, y)); } } // This code is contributed by // Shashank_Sharma

Python3

Python3 program to find the minimum number

sets with consecutive numbers and less than Y

import math as mt

Function to find the minimum number of shets

def minimumSets(s, y):

# Variable to count the number of sets
cnt = 0
num = 0

l = len(s)
f = 0

# Iterate in the string
for i in range(l):
    
    # Add the number to string
    num = num * 10 + (ord(s[i]) - ord('0'))

    # Mark that we got a number
    if (num <= y):
        f = 1
    else: # Every time it exceeds

        # Check if previous was anytime
        # less than Y
        if (f):
            cnt += 1

        # Current number
        num = ord(s[i]) - ord('0')
        f = 0

        # Check for current number
        if (num <= y):
            f = 1
        else:
            num = 0
    
# Check for last added number
if (f):
    cnt += 1

return cnt

Driver Code

s = "1234" y = 30 print(minimumSets(s, y))

This code is contributed by

Mohit kumar 29

C#

// C# program to find the minimum number // sets with consecutive numbers and less than Y

using System;

class solution {

// Function to find the minimum number of shets static int minimumSets(string s, int y) {

// Variable to count 
// the number of sets 
int cnt = 0; 
int num = 0; 

int l = s.Length ; 
bool f = false; 

// Iterate in the string 
for (int i = 0; i < l; i++) { 

    // Add the number to string 
    num = num * 10 + (s[i] - '0'); 

    // Mark that we got a number 
    if (num <= y) 
        f = true; 
    else // Every time it exceeds 
    { 

        // Check if previous was 
        // anytime less than Y 
        if (f) 
            cnt += 1; 

        // Current number 
        num = s[i] - '0'; 
        f = false; 

        // Check for current number 
        if (num <= y) 
            f = true; 
        else
            num = 0; 
    } 
} 

// Check for last added number 
if (f == true) 
    cnt += 1; 

return cnt; 

}

// Driver Code public static void Main() { string s = "1234"; int y = 30;

Console.WriteLine(minimumSets(s, y)); 

} // This code is contributed by Ryuga

}

PHP

l=strlen(l = strlen(l=strlen(s); $f = 0; // Iterate in the string for ($i = 0; i<i < i<l; $i++) { // Add the number to string num=num = num=num * 10 + ($s[$i] - '0'); // Mark that we got a number if ($num <= $y) $f = 1; else // Every time it exceeds { // Check if previous was // anytime less than Y if ($f) $cnt += 1; // Current number num=num = num=s[$i] - '0'; $f = 0; // Check for current number if ($num <= $y) $f = 1; else $num = 0; } } // Check for last added number if ($f) $cnt += 1; return $cnt; } // Driver Code $s = "1234"; $y = 30; echo(minimumSets($s, $y)); //This code is contributed by Shivi_Aggarwal ?>

JavaScript

`

Time Complexity: O(N), as we are using a loop to traverse N times. Where N is the length of the string.

Auxiliary Space: O(1), as we are not using any extra space.