下面这段代码的算法的时间复杂度是多少,最好能解释下思路
下面这段代码的算法的时间复杂度是多少,最好能解释下思路
i= s = 0;
while (s<n)
{
i++;
s+=i;
}
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
下面这段代码的算法的时间复杂度是多少,最好能解释下思路
i= s = 0;
while (s<n)
{
i++;
s+=i;
}
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
接受
或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
发布评论
评论(3)
O(n^1/2)
设
i
刚好终止,由求和公式得到(0 + i) * (i + 1) / 2 >= n
,保留最高阶i^2
,得到O(sqrt(n))
时间复杂度。暴力法(因为我脑子懒但手勤快)
$ cat complex.groovy
$ groovy complex.groovy
所以算法复杂度是根号(2n): (2n)^1/2, 一般忽略常数系数, O(n^(1/2))
把 s 打印出来,很容易发现规律的.
PS: 根号2的新求法 ;)