为了账号安全,请及时绑定邮箱和手机立即绑定

您的程序花费的时间比预期要长。超出了时间限制。预计时间限制 < 3.496 秒

您的程序花费的时间比预期要长。超出了时间限制。预计时间限制 < 3.496 秒

C#
蓝山帝景 2023-09-16 17:08:03
这是我的代码链接。当我在这里提交代码时它显示:Your program took more time than expected.Time Limit Exceeded  Expected Time Limit < 3.496sec  Hint : Please optimize your code and submit again.为什么Time Limit Exceeded会出现?我该如何解决这个问题?注意当我在这里运行代码时,一切正常。但是当我单击此处的Submit按钮时,它显示以下错误: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();        }
查看完整描述

1 回答

?
慕后森

TA贡献1802条经验 获得超5个赞

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

  • 您在其他人的服务器上运行代码,因此您可以执行的操作受到限制;随意浪费服务器资源会让其他人的体验变得更糟,并增加主机的成本。

  • 您正在进行编程练习,以测试您编写正确、高性能代码的能力。时间限制是你应该解决的问题的一部分:)

注意问题中定义的约束:

1≤T≤200

1≤N≤10E7

1 ≤ arr[i] ≤ 1000

每个数组的长度最多可达 1000 万个元素。这是大量的 int 解析和字符串连接、大量的分配等。

您可以尝试如何改进您的代码?

  • 避免解析相同的数字两次 - 您总是解析数组的每个元素两次,这是不必要的成本。

  • 尝试使用StringBuilder构建输出字符串而不是单独Console.Write调用;StringBuilder通过一次调用写入整个内容Console.WriteLine,并清除以StringBuilder在下一次迭代中使用(避免必须一遍又一遍地分配另一个大字符串)。

  • 您可以编写自己的整数解析器,而不是使用Splitand int.Parse,该解析器可以逐字符读取输入数据,而无需始终创建新字符串。您拥有的输入数据受到很好的限制,因此编写解析器几乎是微不足道的。

  • 根据执行环境,可能值得将数据从输入直接流式传输到输出,而无需中间字符串(这本质上与第 2 点相反。),理想情况下同时缓冲输入和输出,这样您就不必处理字符串太大(再次记住,数组可以有一千万个元素,这是一个非常长的字符串!)。

祝你成功完成挑战!:)


查看完整回答
反对 回复 2023-09-16
  • 1 回答
  • 0 关注
  • 51 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信