stack - 堆栈迭代的时间复杂度
问题描述
我有一个对象数组,我有两个堆栈,我遍历数组,对于每个元素,我推送以前的对象(从堆栈 1 弹出并推送到堆栈 2),然后重新放置它们(从堆栈 2 弹出并推送到堆栈 1 )。
我想知道它是什么时间复杂化 - o(n) 或 o(n^2)
因为每个堆栈操作(push pop)都是o(1)。
for (int i = 0; i < buildingsHeight.Length; i++)
{
while (!BuildingStack.IsEmpty() && !didWeFoundHigerBuilding)
{
BuildingStackNode buildingInLine = BuildingStack.Pop();
helperStack.Push(BuildingStack.Pop());
}
// restore data
while (!helperStack.IsEmpty())
{
BuildingStack.Push(helperStack.Pop());
}
}
解决方案
首先,我想您的意思是“O”而不是小“o”(具有不同的含义)?其次,如果不定义“n”,就说像 O(n) 这样的东西没有任何意义。那么什么是n?
您显示的代码有点奇怪,因为您正在循环数组buildingsHeight
,但您没有对循环内的数组执行任何操作。无论如何,这段代码的时间复杂度取决于两个参数:长度和项目buildingsHeight
a
数量(假设最初是空的)。b
BuildingStack
helperStack
while 循环各取O(b)
,而 for 循环迭代a
次数,因此整体复杂度为O(ab)
。
推荐阅读
- google-sheets - 强制复制受保护的谷歌表格
- python - 如何根据 Python 中的最小值、最大值和可能值生成阶梯分布值?
- azure - 如何在 Azure DevOps Board 中设置 WIP 限制 - Sprint 视图
- sql - SQL:如果两个条件都满足而不是在多个where中单独排除,如何仅排除条件?
- php - yii2中camelcase字段模型的问题
- typescript - 为 Azure Functions 编写可测试的入口点
- flutter - 在颤动中更改文本字段的突出显示颜色
- java - Android Studio - 在另一个 aar 模块中隐藏 aar 模块依赖项
- python - 从字节创建固定大小元组的numpy数组的有效方法
- java - 为 HttpClientErrorException 设置 Httpstatus 499