Рубрики
Без рубрики

Максимальная высота, когда монеты расположены по лестнице – вопрос о интервью GoDaddy

Учитывая в общей сложности N монеты, найдите общее количество полных лестничных рядов, которые могут быть построены. Лестница … Помечено CPP, Python, Career, Interview.

Проблемы интервью (7 серии части)

Учитывая в общей сложности n Монеты находят общее количество полных лестниц, которые могут быть построены.

Ряд лестниц – это те, где я -th Row имеет я монеты.

Например, приведены, верните 3, так как вы можете сформировать лестницу, как это:

*
* *
* * *

Дано, верните 3.

*
* *
* * *
* * *

Обратите внимание, что 4 -й ряд недействителен, поскольку у него нет 4 монет.

Подход – 1: Бинарный поиск

Чтобы построить лестницу до k-th ряд, нам нужно:

1 + 2 + 3 + … +*(k + 1)/2 монеты.

Таким образом, нам нужно найти максимальный k, такой, что, k*(k + 1)/2.

Поскольку N является растущей функцией K, мы можем использовать бинарный поиск для решения этой проблемы.

Мы инициализируем низкий и высоко как 0 и n соответственно. На каждом шаге мы рассчитываем Значение монет, требуемых с использованием формулы*(k + 1)/2 где k это Средний элемент между низкий и высоко . Если требуемые монеты больше n Значение Высокий обновляется до k - 1 и если это меньше, чем n , значение из низкий обновляется до K + 1 Анкет Поскольку мы уменьшаем пространство поиска наполовину в каждом Итерация, временная сложность O (logn) , где n – количество монет.

C ++ Код:

#include 
using namespace std;

int arrangeCoins(int n) {
    long low = 0, high = n;
    while (low <= high) {
        long k = low + (high - low) / 2;
        long cur = k * (k + 1) / 2;

        if (cur == n) return (int)k;

        if (n < cur) {
            high = k - 1;
        } else {
            low = k + 1;
        }
    }
    return (int)high;
}

int main() {
    cout << 6 << " " << arrangeCoins(6) << endl;
    cout << 9 << " " << arrangeCoins(9) << endl;
}

Код Python:

def arrangeCoins(n):
    low = 0
    high = n
    while low <= high:
        k = low + (high - low) // 2
        cur = k * (k + 1) // 2

        if cur == n: return k

        if n < cur:
            high = k - 1
        else:
            low = k + 1
    return high

if __name__ == '__main__':
    print(6, arrangeCoins(6))  # n = 6, prints 3
    print(9, arrangeCoins(9))  # n = 9, prints 3

Сложность времени: O (logn) Из -за бинарного поиска

Сложность пространства: O (1)

Подход – 2: Математика

Мы сформулировали уравнение:

k*(k + 1) / 2 <= n
k^2 + k <= 2*n
k^2 + k - 2*n <=0

Мы можем использовать формулу Sridharacarya для решения этого уравнения:

k = (-1 + sqrt(1 + 8n))/2

C ++ Код:

#include 
#include 
using namespace std;

int arrangeCoins(int n) {
    int(-1 + sqrt(1 + (long)8 * n)) / 2;
}

int main() {
    cout << 6 << " " << arrangeCoins(6) << endl;
    cout << 9 << " " << arrangeCoins(9) << endl;
}

Код Python:

def arrangeCoins(n):
    return int((-1 + ((1 + 8 * n) ** 0.5)) / 2)

if __name__ == '__main__':
    print(6, arrangeCoins(6))  # n = 6, prints 3
    print(9, arrangeCoins(9))  # n = 9, prints 3

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

Сложность пространства: O (1)

Проблемы интервью (7 серии части)

Оригинал: “https://dev.to/ayanb/maximum-height-when-coins-are-arranged-in-staircase-fashion-a-godaddy-interview-question-3jin”