algorithm - 这个算法的复杂度(Big O)是多少?
问题描述
我有一个从 0 到 n-1 的 n 个数字的数组。
int func(Integer[]array){
int res = 0;
for (int x = 0; x < array.length; x++) {
for (int y = x; y > Math.max(x - 1000, 0) ; y--) {
res = res + array[y];
}
}
return res;
}
O(n), O(n^2), O(n^1/5), O(log n)
我认为是O(n^2)。我是正确的?
解决方案
看来保罗的评论是正确的。内循环仅在恒定时间运行。因此,外部循环的时间复杂度仅为 O(N)。
该算法也在常数内存 O(1) 上运行。
推荐阅读
- java - gradle中的依赖着色
- docker - GitLab CI 因 maven-surefire-plugin 和 VM 崩溃而失败
- branch.io - 访问分支 API 时的跨域读取阻塞 (CORB)
- c# - 在 foreach C# 期间更新数据表中的一行
- wpf - SQL Server 连接使用 LinqToSQL 失败,但使用 EF 6
- python - 从 CSV 的列中删除 1000 的分隔符?
- javascript - 如何使用变量访问字典值:Javascript
- javascript - 默认情况下如何隐藏可折叠表格(顶行除外)
- php - PHP + MySQL:高效地将大型电子表格上传到 MySQL
- css - 如何防止 CSS 3D 转换的元素扩展页面?