time-complexity - 交叉路口的时间复杂度(最坏情况)
问题描述
难以找到最坏情况时间复杂度的时间复杂度。这种情况适用于两个相同大小 (n) 的排序数组的交集。
不确定如何计算带有两个条件的 while 循环或如何计算 if 和 else if 语句
我知道大 0 将是 N+N 但不知道如何显示最坏的情况。
int printIntersection(int arr1[], int arr2[]) {
int i = 0, j = 0;
while (i < n && j < n) {
if (arr1[i] < arr2[j])
i++;
else if (arr2[j] < arr1[i])
j++;
else /* if arr1[i] == arr2[j] */ {
cout << arr2[j] << " ";
i++;
j++;
}
}
}
解决方案
为了证明在最坏的情况下循环将进行 2N 次迭代,您可以使用以下参数。
给定两个索引i
,j
在每一步:
- 如果
arr1[i] < arr2[j]
theni
增加 1 - 如果
arr2[i] > arr1[j]
thenj
增加 1 - if
arr2[i] = arr1[j]
theni
和j
都加 1
在每次迭代中,至少i 和 j 之间的一个递增 1,并且最大迭代次数以 2N 为界(i 和 j 都从 0 变为 n-1),您将得到最坏情况下的时间复杂度。
推荐阅读
- matplotlib - 创建极坐标直方图网格(python)
- c - C:调整数组大小
- amazon-web-services - AWS CDK:在 CDK 序列中运行外部构建命令?
- javascript - api 请求在一分钟后出现 404 错误,这在我的本地工作正常,将共享 webpack-dev 配置文件
- java - 处理封闭范围中定义的局部变量的流问题必须是最终的
- css - 部署到 github 页面时 CSS 相对路径损坏,构建过程问题?
- gnuplot - 使用 gnuplot 绘制轨迹
- javascript - 如何使用 javascript date.now() 返回本地时间?
- docker - docker run -p only containerPort,是什么
- javascript - firebase 实时数据库中的对话和未读消息列表