Учитывая отсортированный массив (отсортированный в неубывающем порядке) положительных чисел, найдите наименьшее положительное целочисленное значение, которое не может быть представлено как сумма элементов любого подмножества данного набора.
Ожидаемая сложность времени O (n).
Примеры:
Input: arr[] = {1, 3, 6, 10, 11, 15}; Output: 2 Input: arr[] = {1, 1, 1, 1}; Output: 5 Input: arr[] = {1, 1, 3, 4}; Output: 10 Input: arr[] = {1, 2, 5, 10, 20, 40}; Output: 4 Input: arr[] = {1, 2, 3, 4, 5, 6}; Output: 22
Простое решение — начать со значения 1 и проверить все значения одно за другим, если они могут суммироваться со значениями в данном массиве. Это решение очень неэффективно, так как оно сводится к задаче с суммой подмножеств, которая является хорошо известной полной задачей NP .
Мы можем решить эту проблему за O (n) раз, используя простой цикл. Пусть входной массив будет arr [0..n-1]. Мы инициализируем результат как 1 (наименьший возможный результат) и пересекаем данный массив. Пусть наименьший элемент, который не может быть представлен элементами с индексами от 0 до (i-1), будет 'res', есть следующие две возможности, когда мы рассматриваем элемент с индексом i:
1) Мы решаем, что 'res' является конечным результатом : если arr [i] больше, чем 'res', то мы нашли пробел, который равен 'res', потому что элементы после arr [i] также будут больше, чем «Рез».
2) Значение 'res' увеличивается после рассмотрения arr [i] : значение 'res' увеличивается на arr [i] (почему? Если элементы от 0 до (i-1) могут представлять от 1 до 'res- 1 ', то элементы от 0 до i могут представлять от 1 до' res + arr [i] — 1 ', добавляя' arr [i] 'ко всем подмножествам, которые представляют от 1 до' res ')
Ниже приводится реализация вышеуказанной идеи.
|
Джава
|
python3
|
C #
|
PHP
|
Выход:
2 4 5 10
Сложность времени вышеуказанной программы O (n).
Эта статья предоставлена Рахул Гупта . Пожалуйста, пишите комментарии, если вы обнаружите что-то неправильное или вы хотите поделиться дополнительной информацией по обсуждаемой выше теме.
Рекомендуемые посты:
- Найдите наименьшее положительное число, которое не может быть представлено заданными цифрами
- Найти наименьшее положительное число, отсутствующее в несортированном массиве | Набор 2
- Найти наименьшее положительное число, отсутствующее в несортированном массиве | Набор 3
- Найти наименьшее положительное число, отсутствующее в несортированном массиве | Комплект 1
- Найдите наименьшее положительное число, отсутствующее в несортированном массиве: реализация хеширования
- Только целое с положительным значением в положительном отрицательном значении в массиве
- Минимальное положительное целое число, необходимое для равномерного разбиения массива
- Найти, является ли массив подмножеством другого массива | Добавлен метод 3
- Найти самые маленькие и вторые самые маленькие элементы в массиве
- Найти, есть ли подмножество размера K с суммой 0 в массиве -1 и +1
- Найти сумму максимально возможной разности из всех подмножеств данного массива.
- Найти, является ли массив подмножеством другого массива, используя Map
- Найти недостающее целое число в массиве, если указано среднее
- Наименьшее подмножество с суммой, большей, чем все остальные элементы
- Найти сингл в массиве из 2n + 1 целых элементов
0.00 (0%) 0 votes