Что такое (sqrt (1 + 8 * long (num)) - 1) / 2? - PullRequest
0 голосов
/ 14 июля 2020

Привет, я искал решения проблемы с leetcode, я знаю, как решить эту проблему, но кто-то другой представил это решение, и я не понимаю, как это работает.

Вопрос в том, сколько количества Вы можете сформировать стопки из n монет, где k-я строка содержит k монет. https://leetcode.com/explore/challenge/card/july-leetcoding-challenge/544/week-1-july-1st-july-7th/3377/

Возврат приведенной выше формулы работает, может ли кто-нибудь мне ее объяснить?

1 Ответ

0 голосов
/ 15 июля 2020
  • Известно, что сумма первых N натуральных чисел (1 + 2 + 3 + ... + N) равна N (N + 1) 2

  • В игре сказано, что если у вас есть 6 монет, вы должны сложить их следующим образом:

          x              (1)
    
          x    x         (2)
    
          x    x     x   (3)
    

    и 6 равно 1 + 2 + 3. Если вам дано K монет и вы знаете, что N (N + 1) / 2 = K, тогда вы знаете, что у вас может быть N строк. Теперь возникает вопрос, учитывая K, как найти N?

Давайте посчитаем:

  • N (N + 1) / 2 = K
  • N ^ 2 + N = 2 * K
  • N ^ 2 + N -2 * K = 0
  • N = (-1 + sqrt (1 + 8K) ) / 2
  • N = -1/2 + sqrt (1/4 + 2K)
  • N = sqrt (2 * K + 0,25) - 0,5
...