Рубрики

Подсчитать минимальное количество подмножеств (или подпоследовательностей) с последовательными числами

Для заданного массива различных положительных чисел задача состоит в том, чтобы вычислить количество подмножеств (или подпоследовательностей) из массива так, чтобы каждое подмножество содержало последовательные числа.

Примеры:

Input :  arr[] = {100, 56, 5, 6, 102, 58, 
                            101, 57, 7, 103, 59}
Output : 3
{5, 6, 7}, { 56, 57, 58, 59}, {100, 101, 102, 103}
are 3 subset in which numbers are consecutive.

Input :  arr[] = {10, 100, 105}
Output : 3
{10}, {100} and {105} are 3 subset in which 
numbers are consecutive.

Идея состоит в том, чтобы отсортировать массив и обойти отсортированный массив, чтобы подсчитать количество таких подмножеств. Чтобы подсчитать количество таких подмножеств, нам нужно посчитать последовательные числа так, чтобы разница между ними не была равна единице.

Ниже приведен алгоритм поиска номера подмножества, содержащего последовательные числа:

1. Sort the array arr[ ] and count = 1.
2. Traverse the sorted array and for each element arr[i].
   If arr[i] + 1 != arr[i+1], 
       then increment the count by one.
3. Return the count. 

Ниже приведена реализация этого подхода:

C ++

// C ++ программа для поиска номера подмножества, содержащего
// последовательные номера
#include <bits/stdc++.h>

using namespace std;

  
// Возвращает количество подмножеств с последовательными числами

int numofsubset(int arr[], int n)

{

    // Сортируем массив так, чтобы элементы, которые

    // последовательный характер стал последовательным

    // в массиве.

    sort(arr, arr + n);

  

    int count = 1; // Инициализировать результат

    for (int i = 0; i < n - 1; i++) {

        // Проверяем, есть ли начало другого

        // подмножество последовательного номера

        if (arr[i] + 1 != arr[i + 1])

            count++;

    }

  

    return count;

}

  
// Управляемая программа

int main()

{

    int arr[] = { 100, 56, 5, 6, 102, 58, 101,

                  57, 7, 103, 59 };

    int n = sizeof(arr) / sizeof(arr[0]);

    cout << numofsubset(arr, n) << endl;

    return 0;

}

Джава

// Java-программа для поиска номера подмножества
// содержащий последовательные числа

import java.util.*;

class GFG {

  

    // Возвращает количество подмножеств с последовательными числами

    static int numofsubset(int arr[], int n)

    {

        // Сортируем массив так, чтобы элементы

        // которые являются последовательными по своей природе

        // стал последовательным в массиве.

        Arrays.sort(arr);

  

        // Инициализировать результат

        int count = 1;

        for (int i = 0; i < n - 1; i++) {

            // Проверяем, есть ли начало

            // другого подмножества

            // порядковый номер

            if (arr[i] + 1 != arr[i + 1])

                count++;

        }

  

        return count;

    }

  

    // Управляемая программа

    public static void main(String[] args)

    {

        int arr[] = { 100, 56, 5, 6, 102, 58, 101,

                      57, 7, 103, 59 };

        int n = arr.length;

        System.out.println(numofsubset(arr, n));

    }

}

  
// Этот код предоставлен prerna saini.

питон

# Программа Python для поиска номера подмножества, содержащего
# последовательных номеров

def numofsubset(arr, n):

  

  # Сортировать массив так, чтобы элементы были последовательными

  # в природе стало последовательно в массиве.

  x = sorted(arr)

   

  count = 1

   

  for i in range(0, n-1):

  

    # Проверьте, есть ли начало другого подмножества

    # порядковый номер

    if (x[i] + 1 != x[i + 1]):

      count = count + 1

   

  return count

  
# Управляемая программа

arr = [ 100, 56, 5, 6, 102, 58, 101, 57, 7, 103, 59 ]

n = len(arr)

print numofsubset(arr, n)

  
# Этот код предоставлен Афзалом Ансари.

C #

// C # программа для поиска номера подмножества
// содержащий последовательные числа

using System;

  

class GFG {

  

    // Возвращает количество подмножеств с

    // последовательные номера

    static int numofsubset(int[] arr, int n)

    {

        // Сортируем массив так, чтобы элементы

        // которые являются последовательными по своей природе

        // стал последовательным в массиве.

        Array.Sort(arr);

  

        // Инициализировать результат

        int count = 1;

        for (int i = 0; i < n - 1; i++) {

              

            // Проверяем, есть ли начало

            // другого подмножества

            // порядковый номер

            if (arr[i] + 1 != arr[i + 1])

                count++;

        }

  

        return count;

    }

  

    // Управляемая программа

    public static void Main()

    {

        int[] arr = { 100, 56, 5, 6, 102, 58, 101,

                                 57, 7, 103, 59 };

        int n = arr.Length;

        Console.WriteLine(numofsubset(arr, n));

    }

}

  
// Этот код предоставлен vt_m.

PHP

<?php
// PHP программа для поиска номера
// подмножества, содержащего
// последовательные номера

  
// Возвращает количество подмножеств
// с последовательными номерами

function numofsubset( $arr, $n)

{

      

    // Сортируем массив так, чтобы

    // элементы, которые

    // последовательный характер

    // стал последовательным

    // в массиве.

    sort($arr);

  

    // Инициализировать результат

    $count = 1; 

    for ($i = 0; $i < $n - 1; $i++)

    {

          

        // Проверяем, есть ли

        // начало другого

        // подмножество последовательных

        // число

        if ($arr[$i] + 1 != $arr[$i + 1])

            $count++;

    }

  

    return $count;

}

  

    // Код драйвера

    $arr = array(100, 56, 5, 6, 102, 58, 101,

                 57, 7, 103, 59 );

    $n = sizeof($arr);

    echo numofsubset($arr, $n);

      
// Этот код предоставлен Anuj_67
?>


Выход:

3

Сложность времени: O (nlogn)

Эта статья предоставлена Anuj Chauhan (anuj0503) . Если вы как GeeksforGeeks и хотели бы внести свой вклад, вы также можете написать статью с помощью contribute.geeksforgeeks.org или по почте статьи contribute@geeksforgeeks.org. Смотрите свою статью, появляющуюся на главной странице GeeksforGeeks, и помогите другим вундеркиндам.

Пожалуйста, пишите комментарии, если вы обнаружите что-то неправильное или вы хотите поделиться дополнительной информацией по обсуждаемой выше теме.

Рекомендуемые посты:

Подсчитать минимальное количество подмножеств (или подпоследовательностей) с последовательными числами

0.00 (0%) 0 votes