程序的时间复杂度求解

想问一下这个程序的每个主要函数的时间复杂度是多少

{

for(i = 0; i < t.length; i++)
    s.data[i] = t.data[i];
s.length = t.length;

}

{
int index;
SqString str;

 str.length = 0;
 for(index = 0; index < s.length; index++) // s.data[0...s.length-1]->str
    str.data[index] = s.data[index];
 for(index = 0; index < t.length; index++) // t.data[0...t.length-1]->str
    str.data[s.length + index] = t.data[index];
 str.length = s.length + t.length; // 计算串长

 return str;

}

static void disp_str(SqString s)
{
int i;

if(s.length > 0)
{
    for(i = 0; i < s.length; i++)
    {
        printf("%c", s.data[i]);
    }
    printf("\n");
}

}

i
static void str_assign(SqString &s, char cstr[])
{
int i;

for(i = 0; cstr[i] != '\0'; i++)
    s.data[i] = cstr[i];
s.length = i;

}

static void str_copy(SqString &s, SqString t)
{
int i;

for(i = 0; i < t.length; i++)
    s.data[i] = t.data[i];
s.length = t.length;

}

else
{
     for(int i = 0; i < s.length; i++)
     {
         if(s.data[i] != t.data[i]) // 有一个对应字符不相同时返回假
         {
             same = false;
             break;
         }
     }
}

return same;

}

 for(index = 0; index < s.length; index++) // s.data[0...s.length-1]->str
    str.data[index] = s.data[index];
 for(index = 0; index < t.length; index++) // t.data[0...t.length-1]->str
    str.data[s.length + index] = t.data[index];
 str.length = s.length + t.length; // 计算串长

 return str;

}

你这些代码都是线性时间复杂度啊 O(n)
只有第六个有最优解 O(1)

  • 这有个类似的问题, 你可以参考下: https://ask.csdn.net/questions/7674452
  • 你也可以参考下这篇文章:设置程序以管理员权限运行无效问题的排查过程分享
  • 除此之外, 这篇博客: 有符号数和无符号数条件判断时的坑中的 描述 部分也许能够解决你的问题, 你可以仔细阅读以下内容或跳转源博客中阅读:
  •   在嵌入式编程过程中,最长接触到的就是无符号数,但也不可避免的会遇到有符号数,当有符号数与无符号数相遇时,总会发生一些“奇妙的玄学”。而这“玄学”稍有不慎就会造成无法弥补的错误。
      来看下面一段代码

    #include <stdio.h>
    void main(void)
    {
    	unsigned int a = 5;
    	int b = -5;
    	if (a > b)
    	{
    		printf("a大于b\r\n");
    	}
    	else
    	{
    		printf("a不大于b\r\n");
    	}
    }
    

      这段代码输出的结果会是什么呢???
    在这里插入图片描述
    有点意思,5居然不大于-5,是编译器傻了吗?不,这是因为,当有符号数与无符号数进行条件判断时,编译器会自动将有符号数隐式转化为无符号数,这时,-5就会变成一个极大的无符号整数,所以造成了逻辑判断上的错误。
    当然,如果直接取两者的运算结果的话,结果还是正确的。
    所以,当进行条件判断时,一定要注意条件运算符两端的数值的数据类型,以免造成判断上导致的流程错误,这错误可能是致命的。

  • 您还可以看一下 孙玖祥老师的图解数据结构与算法课程中的 队列的常用操作复杂度分析小节, 巩固相关知识点