请给出下列这段代码的时间复杂度分析: const int maxn = 350;//题目给出的最大数字 char neck[maxn*2];//项链数组所存储最大数字 int n,ans = 0,lb[maxn*2] = {0},lr[maxn*2] = {0},rb[maxn*2] = {0},rr[maxn*2] = {0}; int max(int a,int b) {return (a>b)?a:b; } int main() { scanf("%d\n",&n); for(int i=1;i<=n;i++){ scanf("%c",&neck[i]); neck[i+n] = neck[i]; } for(int i=1;i<=2*n;i++){ if(neck[i] == 'w'){ lb[i] = lb[i-1] + 1; lr[i] = lr[i-1] + 1; } else if(neck[i] == 'r'){ lr[i] = lr[i-1] + 1; } else if(neck[i] == 'b'){ lb[i] = lb[i-1] + 1; } } for(int i=2*n;i>=1;i--){ if(neck[i] == 'w'){ rb[i] = rb[i+1] + 1; rr[i] = rr[i+1] + 1; } else if(neck[i] == 'r'){ rr[i] = rr[i+1] + 1; } else if(neck[i] == 'b'){ rb[i] = rb[i+1] + 1; } } for(int i=1;i<=2*n;i++){ ans = max(ans,max(lr[i],lb[i])+max(rr[i+1],rb[i+1])); } if(ans > n){ ans = n; } printf("%d",ans); return 0; }
时间: 2024-03-29 10:36:31 浏览: 49
这段代码的时间复杂度分析如下:
1. 定义常量 maxn,时间复杂度为 O(1)。
2. 定义字符数组 neck,时间复杂度为 O(maxn)。
3. 定义整型变量 n、ans 和四个整型数组 lb、lr、rb、rr,时间复杂度为 O(1)。
4. 定义函数 max,时间复杂度为 O(1)。
5. 执行 scanf 函数,时间复杂度为 O(1)。
6. 执行 for 循环,时间复杂度为 O(n)。
7. 在 for 循环中执行了两次 scanf 函数,时间复杂度为 O(2n)。
8. 执行两个 for 循环,时间复杂度为 O(4n)。
9. 在两个 for 循环中执行了三次 max 函数,时间复杂度为 O(3n)。
10. 执行 if 判断语句和赋值语句,时间复杂度为 O(1)。
11. 执行 printf 函数,时间复杂度为 O(1)。
12. 总时间复杂度为 O(maxn + 10n)。
因为 maxn 的值为 350,远小于 10n,所以可以近似认为总时间复杂度为 O(n)。
相关问题
请给出下列这段代码的时间复杂度分析: const int maxn = 350;//题目给出的最大数字 char neck[maxn*2];//项链数组所存储最大数字 int n,ans = 0,lb[maxn*2] = {0},lr[maxn*2] = {0},rb[maxn*2] = {0},rr[maxn*2] = {0}; int max(int a,int b) {return (a>b)?a:b; } int main() { scanf("%d\n",&n); for(int i=
这段代码的时间复杂度分析如下:
1. 定义常量 maxn,时间复杂度为 O(1)。
2. 定义字符数组 neck,时间复杂度为 O(maxn)。
3. 定义整型变量 n、ans 和四个整型数组 lb、lr、rb、rr,时间复杂度为 O(1)。
4. 定义函数 max,时间复杂度为 O(1)。
5. 执行 scanf 函数,时间复杂度为 O(1)。
6. 执行 for 循环,时间复杂度为 O(2*maxn)。
7. 在 for 循环中执行了两次 max 函数,时间复杂度为 O(2)。
8. 总时间复杂度为 O(maxn)。
因此,这段代码的时间复杂度为 O(maxn)。
阅读全文