python - Codility最后界元素

标签 python algorithm

如何解决以下递归关系

为非负整数定义函数F(K)如下:


当K = 0时F(K)= 0
当K> 0时F(K)= F(K-1)+ K


编写一个函数:

def solution(N)


给定一个非负整数N,则返回最大非负整数L,使得F(L)≤N。

例如,给定N = 17,该函数应返回5,因为对于所有大于5的整数K,F(5)= 15且F(K)> 17。

针对以下假设编写高效的程序:


N是在[0..1,000,000,000]范围内的整数。

最佳答案

您在F(K)中给出的级数只是从0 ... K开始的所有正数之和。这是具有直接公式1/2 * K * (K+1)的高斯级数。因此,您基本上想找到1/2 * K (K+1) = N的K并将其四舍五入。重写给出:K^2 + K - 2N = 0使用二次公式给出正数:K = (-1 + sqrt(1+8*N))/2.因此在python中:

from math import *

def solution(N):
   K = (-1+sqrt(1+8*N))/2
   return int(K) #int truncates downwards


由于此算法使用直接公式,因此速度非常快

关于python - Codility最后界元素,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59288317/

相关文章:

python - 如何根据另一个包含通配符的列表过滤列表?

algorithm - 如何找到用隐马尔可夫模型解决的问题示例?

algorithm - 如何实现莱特纳算法(间隔重复)?

objective-c - Objective C 中的 MasterMind 评分算法

python - 在 Python 中拟合分箱对数正态数据

python - 使用 ctypes 调用指向定义为静态的函数的函数指针

python - 如何在 PySide 的 QTreeView 中隐藏 QFileSystemModel 中的项目?

python - 如何判断 NumPy 是创建 View 还是副本?

c# - 从向量列表创建所有可能组合的算法函数

algorithm - 还款金额不固定时计算年利率