以下实施算法的时间复杂度是多少?
我应该注意b
的长度足以覆盖a
的元素作为索引。
void smax(int[] a, int n){
int[] b = new int[n];
for (int i=0;i<b.length;i++){
b[i]=0;
}
int m=0;
while (m<b.length) {
int k=a[0];
for (int i=0;i<a.length;i++) {
if (a[i]> k && b[a[i]]!=1) {
b[a[i]]=1;
}
}
m++;
}
for (int i=0;i<a.length;i++){
if (b[a[i]]!=1){
b[a[i]]=1;
}
}
for (int j=0;j<b.length;j++){
if (b[j]==1){
System.out.println(j);
}
}
}
答案 0 :(得分:2)
看起来像家庭作业所以最好的答案不仅是最终答案,而且还是你可以学习的答案。
设n = a.Lengh,m = b.Length
for (int i=0;i<b.length;i++){
b[i]=0;
}
对b的元素进行一次传递,因此它将贡献m步。
for (int i=0;i<a.length;i++){
if (b[a[i]]!=1){
b[a[i]]=1;
}
}
对一个元素进行一次传递,这样就可以完成n步。
for (int j=0;j<b.length;j++){
if (b[j]==1){
System.out.println(j);
}
}
对b的元素进行一次传递,因此它将贡献m步。
到目前为止,我们有2米+ nint m=0;
while (m<b.length) {
int k=a[0];
for (int i=0;i<a.length;i++) {
if (a[i]> k && b[a[i]]!=1) {
b[a[i]]=1;
}
}
m++;
}
对于b的每个元素,都会传递所有a元素,这些元素有助于mn步。
所有步长之和为2m + n + mn,渐近符号为O(mn)。
答案 1 :(得分:1)
O(LEN(B)* LEN(a))的
答案 2 :(得分:0)
看起来像O(b * a)