这个代码的时间如何优化?

感觉已经是相对简洁的代码了(可以加个n%sorts结果不为零时直接return false),只有两个单层循环但还是超时了. . .

img

img

这个题目主要是排序遍历数组,大概编程的思路就是:

  1. 先存,这一步一个是读入数据,另一个作用就是求出数据的总数 n 。
  2. 排序,将数据有序化,这样后面才能一遍遍历过。
  3. 遍历,查看第 i 个是否与 第 i + 1 个相等,如果相等,把他们划为一组,我们只需要去求每一组的成员数是否都相等,如果发现有不相等的,后面就不用搜了,直接输出 false ,然后 return 0 。
  4. 如果所有组的成员数量都相等,中途没有return 0,这时我们就输出 true ,然后return 0 。
    代码可能会更加形象:
    我去看了力扣的原题,这段代码不能直接交,因为在力扣里面根本编译不了(它用的类并且好像数据是已经输入完成了的):
    你用C++的编译器可以过,样例也可以过。
#include<iostream>
#include<algorithm>
using namespace std;

const int MAXN=10005;
int deck[MAXN];
int n=1;

int main()
{
    while(cin>>deck[n]) n++;
    n--;
    sort(deck+1,deck+n+1);
    bool flag=true;
    int x=0,maxx=-0x3f3f3f3f;
    for(int i=1;i<n;i++)
    {
        if(deck[i]!=deck[i+1]) 
        {
            if(x+1!=maxx&&maxx!=-0x3f3f3f3f) 
            {
                cout<<"false";
                return 0;  
            }
            else maxx=max(x+1,maxx);
            x=0;
        }
        x++;
    }
    cout<<"true";

}
 //希望对您有帮助 qwq


```

不知道你这个问题是否已经解决, 如果还没有解决的话:

如果你已经解决了该问题, 非常希望你能够分享一下解决方案, 写成博客, 将相关链接放在评论区, 以帮助更多的人 ^-^