首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >PHP中的可塑性循环旋转解

PHP中的可塑性循环旋转解
EN

Code Review用户
提问于 2018-03-16 07:48:29
回答 3查看 1.4K关注 0票数 2

问题陈述

给出了一个由N个整数组成的零索引数组A.数组的旋转意味着每个元素被右移一个索引,数组的最后一个元素也被移到第一位。

例如,数组A= is的旋转。目标是旋转数组A、K次;也就是说,A的每个元素都将被K索引移到右边。

我的解决方案

代码语言:javascript
复制
function solution($A, $K) {
   // when array is empty or has only one element 
   if(count($A) == 0 || count($A) == 1){
        return $A;
    }
    //runs k times
    for($j=1; $j<=$K; $j++){
        $last_element = $A[count($A)-1];
        //runs for each element
        for($i=(count($A)-1); $i>0; $i--){
            $A[$i] = $A[$i-1];
        }
        $A[0] = $last_element;  
    }
    return $A;
}

$A = [1, 2, 3, 4];
$K = 4;
$result = solution($A, $K);
print_r($result);

输出

代码语言:javascript
复制
Array
(
    [0] => 1
    [1] => 2
    [2] => 3
    [3] => 4
)
EN

回答 3

Code Review用户

发布于 2018-03-17 16:23:18

你可以使用数组函数。它们简化并加速了数组的处理。请参阅:http://php.net/manual/en/ref.array.php

所以你的代码可以变成:

代码语言:javascript
复制
function rotateArray($inputArray,$rightShiftCount)
// shift all elements of the array to the right a number of times
{
  // extract the part of the array to move to the front
  $partToMove = array_splice($inputArray,-($rightShiftCount % count($inputArray)));
  // return extract part followed by what was left of the array
  return array_merge($partToMove,$inputArray);
}

此函数不检查其参数,如果需要,可以添加该参数。

注意,我为变量使用了合理的名称,而不是$A$K。这是故意的。

票数 3
EN

Code Review用户

发布于 2022-06-17 13:57:10

  1. 在一次性编码挑战中,solution可能是一个可以接受的函数名,但在实际应用程序中,尝试给您的函数一个直观的名称来描述其功能。
  2. 将类型声明与输入参数和返回值一起使用,以在应用程序中强制执行稳定的编码实践。
  3. 执行尽可能多的早期返回,以降低时间复杂度和提高效率。
  4. 大小为0或1的数组不可能旋转,因此请尽早返回。
  5. 如果所需的popShifts数除以数组大小后的余数为零,则提前返回,因为无论您是否调用旋转函数,输出都将与输入相同。
  6. 避免声明单一用途变量。
  7. 从数组的后面剪掉适当数量的元素,并将它们放在剩下的元素前面。

代码:(演示)

代码语言:javascript
复制
function popUnshift(array $indexedArray, int $popShiftsCount): array
{
    $count = count($indexedArray);
    if ($count < 2) {
        return $indexedArray;
    }
    $remainder = $popShiftsCount % $count;
    if (!$remainder) {
        return $indexedArray;
    }
    return array_merge(
        array_splice($indexedArray, -$remainder),
        $indexedArray
    );
}
票数 2
EN

Code Review用户

发布于 2018-03-17 12:59:29

实际上,您不需要旋转初始数组的K时间:

代码语言:javascript
复制
 0; $i--) {
            $A[$i] = $A[$i - 1];
        }
        $A[0] = $last_element;
    }
    return $A;
}
票数 1
EN
页面原文内容由Code Review提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://codereview.stackexchange.com/questions/189734

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档