【发布时间】:2023-03-08 11:28:01
【问题描述】:
对大小为 n 的数组的左旋转操作将数组的每个元素向左移动 1 个单位。例如,如果对数组 [1,2,3,4,5] 执行 2 次左旋转,则数组将变为 [3,4,1,2,3]。 我正在尝试找到解决以下问题的最有效方法。第一行包含两个以空格分隔的整数,分别表示 n(整数个数)和 d(必须执行的左旋转数)的值。 第二行包含 n 个以空格分隔的整数,描述数组初始状态的各个元素。
示例输入:
5 4
1 2 3 4 5
示例输出:
5 1 2 3 4
在大多数情况下,我的以下代码运行良好,但在执行时间方面,似乎还有一些改进空间 - 由于超时,它目前无法通过一个非常大的输入文件(见下文)的测试。
我的问题是,可以做些什么来减少下面这段代码的执行时间?
<?php
$file = file_get_contents ("php://stdin","r");
$file = explode("\n",$file);
$meta = explode(" ", $file[0]);
$rotations = $meta[1];
$nums = explode(" ", $file[1]);
while($rotations > 0) {
$removed = array_shift($nums);
$nums[] = $removed;
--$rotations;
}
echo implode(" ", $nums);
?>
大型输入文件
【问题讨论】:
-
您与哪个提议的解决方案进行比较?
-
谁提出了哪个建议?您指的是您之前的任何问题吗?您在问我们“为我优化此代码”是什么?
-
@CodeCaster,见已编辑。
-
它目前未能通过一项测试 - 它是如何失败的?执行时间,内存耗尽?
-
@RomanPerekhrest,执行时间。它正在使用在线编译器进行测试。我不确定他们设置了什么内存/执行时间限制,但它显示“由于超时而终止”,对于使用原始帖子中的输入文件的测试用例