Найдите ряд, до которого в ромбовидном узоре есть не менее K звезд.

Опубликовано: 20 Сентября, 2022

Даны два целых числа N и K , где N представляет собой ромбовидный узор с ( 2 * N) -1 рядами, задача состоит в том, чтобы найти индекс первого ряда, до которого в ромбовидном узоре имеется не менее K звезд.

Обратите внимание, что значение K всегда будет иметь определенный ответ.

Примеры :

Input: N = 3 , K = 8
Output: 4
Explanation: The first 4 rows contain a total of 8 stars.
                               *

                              * *

                             * * *

                              * *

                               *
Input: N = 5, K = 5
Output: 3

Наивный подход: данную проблему можно решить, просто перебирая каждую строку и сохраняя подсчет количества звезд в каждой строке. Выведите первые два, где количество звезд превышает K.

Ниже приведена реализация вышеуказанного подхода:

Временная сложность : O(N)
Вспомогательное пространство : O(1)

Эффективный подход. Описанный выше подход можно оптимизировать с помощью бинарного поиска по значению количества строк из [0, 2*n-1] . Выполните следующие шаги, чтобы решить проблему:

  • Инициализируйте переменные start = 0, end = (2 * N) – 1 и, ans = 0.
  • Выполните следующие действия, пока значение start меньше конец .
    • Вычислить середину , которая равна (начало + конец) / 2
    • Подсчитайте количество звезд до середины .
    • Если количество звездочек до середины больше или равно K, s разорвет середину в переменную и переместится влево от середины на конец = середина-1
    • В противном случае переместитесь вправо от середины по началу = середина + 1
  • Возвратите ans , который является требуемым значением.

Ниже приведена реализация вышеуказанного подхода:

Временная сложность: O (log N)
Вспомогательное пространство: O(1)