Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/281.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/arrays/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
PHP数组-优化_Php_Arrays_Algorithm - Fatal编程技术网

PHP数组-优化

PHP数组-优化,php,arrays,algorithm,Php,Arrays,Algorithm,对大小为n的数组执行左旋转操作会将数组的每个元素向左移动1个单位。例如,如果对数组[1,2,3,4,5]执行两次左旋转,则该数组将变为[3,4,1,2,3]。 我正试图找到最有效的方法来解决以下问题。第一行包含两个空格分隔的整数,分别表示n(整数的数量)和d(必须执行的左旋转的数量)的值。 第二行包含n个空间分隔的整数,描述数组初始状态的各个元素 输入示例: 5 4 1 2 3 4 5 示例输出: 5 1 2 3 4 在大多数情况下,我下面的代码工作得很好,但在执行时间方面,似乎还有一些改进

对大小为n的数组执行左旋转操作会将数组的每个元素向左移动1个单位。例如,如果对数组[1,2,3,4,5]执行两次左旋转,则该数组将变为[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);

?>

大输入文件

用户阵列\u片

array array_slice ( array $array , int $offset [, int $length = NULL [, bool $preserve_keys = false ]] )
伪代码:

// you are given: $array_size, $rotation, $input_array;
$rotation = $rotation % array_size;
$slice_place = $array_size - rotation;

$answer = []
if(rotation>0) {
    $array1 = array_slice($input_array, $slice_place, $rotation)
    $array2 = array_slice($input_array, 0, $slice_place)
    $answer = array_merge($array1, $array2)
}
else {
    $answer = $input_array
}

你比较的是哪种建议的解决方案?谁提出的建议?你是指你之前的问题吗?您要求我们“为我优化此代码”是什么?@CodeCaster,请参阅编辑。它当前未通过一项测试-如何失败?执行时间,内存耗尽?@RomanPerekhrest,执行时间。它正在使用在线编译器进行测试。我不确定他们设置了什么内存/执行时间限制,但它显示“由于超时而终止”,对于使用原始帖子中输入文件的测试用例,这并没有回答问题,请解释编辑的原因。你能解释一下为什么你的代码可以工作,为什么你建议的实现更高效吗?@GeorgeCastan100你的代码有复杂度O(旋转),每一个都包括数组移位这样的操作,即O(大小数组)。在总O(旋转*大小数组)中,我的是复杂度O(大小数组)的三个运算,因此它是O(大小数组)=),谢谢,这很有帮助@GeorgeCastan100:为了执行r旋转,他的代码只使用1x时间旋转计算O(n),但您的代码使用r旋转运行,这导致复杂性O(n*r)。