C# 您的程序花费的时间超出预期。超出了时间限制。预期时间限制

C# 您的程序花费的时间超出预期。超出了时间限制。预期时间限制,c#,C#,,是我的代码链接。 当我提交代码时,它显示: Your program took more time than expected.Time Limit Exceeded Expected Time Limit < 3.496sec Hint : Please optimize your code and submit again. 谢谢 我的代码是 int testCases = int.Parse(Console.ReadLine().Trim());

,是我的代码链接。 当我提交代码时,它显示:

Your program took more time than expected.Time Limit Exceeded 
Expected Time Limit < 3.496sec 
Hint : Please optimize your code and submit again. 
谢谢

我的代码是

        int testCases = int.Parse(Console.ReadLine().Trim());

        while (testCases-- > 0)
        {
            int arrSize = int.Parse(Console.ReadLine().Trim());
            string[] arr = Console.ReadLine().Trim().Split(' ');

            for (int i = 0; i < arrSize - 1; i++)
            {
                if (int.Parse(arr[i]) > int.Parse(arr[i + 1]))
                {
                    Console.Write(arr[i + 1] + " ");
                }
                else
                    Console.Write("-1" + " ");
            }
            Console.Write("-1");
            Console.WriteLine();
        }

简单的答案是你的代码太慢了。为什么这很重要

您正在其他人的服务器上运行代码,因此您所能做的是有限的;轻率地浪费服务器资源会使其他人的体验更糟,并增加主机的成本。 您正在进行编程练习,测试您编写正确、高性能代码的能力。时间限制是您应该解决的问题的一部分: 注意问题中定义的约束:

一,≤ T≤ 二百

一,≤ N≤ 10E7

一,≤ arr[i]≤ 一千

每个阵列的长度可达1000万个元素。这需要大量的int解析和字符串连接,以及大量的分配等等

您可以尝试如何改进代码

避免对同一个数字进行两次解析-总是对数组的每个元素进行两次解析,这是一项不必要的开销。 尝试使用StringBuilder构建输出字符串,而不是单个控制台;使用单个Console.WriteLine调用编写整个StringBuilder,并清除StringBuilder以供下一次迭代使用,避免反复分配另一个大字符串。 不必使用Split和int.Parse,您可以编写自己的整数解析器,它可以逐个字符读取输入数据,而无需一直创建新字符串。您拥有的输入数据受到很好的约束,因此编写解析器几乎是件小事。 根据执行环境的不同,在不使用中间字符串的情况下直接将数据从输入流到输出可能是值得的。这本质上与第2点相反。理想情况下,在缓冲输入和输出时,您不必再处理太大的字符串,请记住数组可以有一千万个元素,这是一根很长的绳子!。 祝你成功完成挑战!:

        int testCases = int.Parse(Console.ReadLine().Trim());

        while (testCases-- > 0)
        {
            int arrSize = int.Parse(Console.ReadLine().Trim());
            string[] arr = Console.ReadLine().Trim().Split(' ');

            for (int i = 0; i < arrSize - 1; i++)
            {
                if (int.Parse(arr[i]) > int.Parse(arr[i + 1]))
                {
                    Console.Write(arr[i + 1] + " ");
                }
                else
                    Console.Write("-1" + " ");
            }
            Console.Write("-1");
            Console.WriteLine();
        }