为什么我这代码还是超时

揽星辰. 2021-02-15 10:05:44

上面是题目
要求:时间复杂度为O(n),空间复杂度为O(1)。
一下是我的代码:

#include <stdio.h>
int main()
{
int a,b,c,d,i;
char ch;
a=b=c=d=0;
while((ch=getchar())!='\n')
{
if(ch=='a') a++;
else if(ch=='b') b++;
else if(ch=='c') c++;
else if(ch=='d') d++;
}
for(i=0;i<a;i++) printf("a");
for(i=0;i<b;i++) printf("b");
for(i=0;i<c;i++) printf("c");
for(i=0;i<d;i++) printf("d");
printf("\n");
return 0;
}
...全文
2343 33 打赏 收藏 转发到动态 举报
写回复
用AI写文章
33 条回复
切换为时间正序
请发表友善的回复…
发表回复
源代码大师 2021-05-06
  • 打赏
  • 举报
回复
希望对你有帮助:https://blog.csdn.net/it_xiangqiang/category_10581430.html 希望对你有帮助:https://blog.csdn.net/it_xiangqiang/category_10768339.html
abc4160201 2021-02-21
  • 打赏
  • 举报
回复
学习学习,C没碰过、、
  • 打赏
  • 举报
回复
如此说来这就是水题,卡I/O时间而已,C用getline/gets应该也可以过:

#include <stdio.h>

char buf[1048576];
int i, j, n[4] = {0};

int main()
{
gets(buf);
for (i = 0; buf[i];) n[buf[i++] & 3]++;
for (i = 1, j = 0; i <= 4; i++) while(n[i & 3]--) buf[j++] = i + 96;
puts(buf);

return 0;
}

  • 打赏
  • 举报
回复
forever74 2021-02-19
  • 打赏
  • 举报
回复
也就是说像我在17,18楼说的那样, 17 开大缓冲区,整行一次输入即可。 18 系统不会鉴定什么O,都是逗你玩的。
MelyLenient 2021-02-19
  • 打赏
  • 举报
回复
学习一下,问题应该出现在排序算法上
qzjhjxj 2021-02-19
  • 打赏
  • 举报
回复
试试这个能不能过
#include <stdio.h>
#include <stdlib.h>

int cmp(const void *a, const void *b)
{
    return *(char *)a - *(char *)b;
}

int main()
{
   char ch[1024];
   gets(ch);
   qsort(ch,strlen(ch),sizeof(char),cmp);
   puts(ch);
  
   return 0;
}

//abaaccbdbdbdabbabcbcabdcabdcbadbcabdcbadbcbadbcabdcabaaccbdbdbdabbabcbcabdcabdcbadbcabdcbadbcbadbcabdc
//aaaaaaaaaaaaaaaaaaaaaaaabbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbccccccccccccccccccccccdddddddddddddddddddd
//请按任意键继续. . 
Chivas_/Regal 2021-02-18
  • 打赏
  • 举报
回复
引用 26 楼 m0_55067373 的回复:
[quote=引用 22 楼 Chivas_/Regal 的回复:]#include<bits/stdc++.h> using namespace std; int main () { string s; cin>>s; sort(s.begin(),s.end()); cout<<s; }
过了,我看到学校其他成功通过的都是用的c++,c语言提交的都失败了[/quote] 其实如果用一下快排流程的话也可以用C过,我这个sort就是为了方便也懒得打快排了。。。。。
揽星辰. 2021-02-18
  • 打赏
  • 举报
回复
引用 22 楼 Chivas_/Regal 的回复:
#include<bits/stdc++.h> using namespace std; int main () { string s; cin>>s; sort(s.begin(),s.end()); cout<<s; }
过了,我看到学校其他成功通过的都是用的c++,c语言提交的都失败了
xiaoyin35 2021-02-18
  • 打赏
  • 举报
回复
unistd.h time(nullptr)现在时间,结束时-开始时,算下时间有帮助
xiaoyin35 2021-02-18
  • 打赏
  • 举报
回复
两下时间。。
  • 打赏
  • 举报
回复
sort的时间复杂度是O(n*logn)
Chivas_/Regal 2021-02-18
  • 打赏
  • 举报
回复
#include<bits/stdc++.h> using namespace std; int main () { string s; cin>>s; sort(s.begin(),s.end()); cout<<s; }
SmallTeddy 2021-02-18
  • 打赏
  • 举报
回复
test: 'abaaccbdbdbdabbabcbcabdcabdcbadbcabdcbadbcbadbcabdc'.split('').sort((a, b) => a.charCodeAt(0)-b.charCodeAt(0)).join('') res: "aaaaaaaaaaaabbbbbbbbbbbbbbbbbbcccccccccccdddddddddd"
耳塾 2021-02-17
  • 打赏
  • 举报
回复
算法的问题了
forever74 2021-02-16
  • 打赏
  • 举报
回复
至于O(n)还是O(1)的,我不认为一个OJ真的能识别得出来,何况大O本来就是个模糊概念。
forever74 2021-02-16
  • 打赏
  • 举报
回复
还有两种可能。 一是行长度确有上限,可以一次一行弄进来在内存里分析,比一次又一次输入快得多。 二是系统输入不止一行却不肯明说,我们处理一行就歇了,当然会超时。
  • 打赏
  • 举报
回复
那就是算法的问题了,必须找到更高效的算法
揽星辰. 2021-02-16
  • 打赏
  • 举报
回复
引用 14 楼 早打大打打核战争 的回复:
再简化一些:

#include <stdio.h>

int main()
{
int n[4] = {0};

for (char c; (c = getchar()) != 10;) n[c & 3]++;
for (int i = 1; i <= 4; i++) while(n[i & 3]--) putchar(i + 96);
puts("");

return 0;
}


还是超时。。。
  • 打赏
  • 举报
回复
再简化一些:

#include <stdio.h>

int main()
{
int n[4] = {0};

for (char c; (c = getchar()) != 10;) n[c & 3]++;
for (int i = 1; i <= 4; i++) while(n[i & 3]--) putchar(i + 96);
puts("");

return 0;
}

加载更多回复(13)

69,335

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧