首页 > 其他 > 详细

面试题(程序02)

时间:2019-06-06 21:11:48      阅读:77      评论:0      收藏:0      [点我收藏+]

给定一个数组,将数组中元素向右移动k个位置,k是非负数。例如:[1,2,3,4,5,6] 和 k=2 。输出:[5,6,1,2,3,4]要求使用空间复杂度O(1)的原地算法。

技术分享图片
//***旋转数组*** rorate=>旋转
$arr = [1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19];
function rorate(array $arr,$k)
{
    $len = count($arr);
    if($k>=$len){
        //$k%$len,那就只需要移动余数次即可
        $k = $k % $len;
    }else{
        $tmp = array_slice($arr,-$k);
        // print_r($arr);
        // print_r($tmp);
        //还要把截取的那一段删除
        for($i=$len-$k;$i<$len;$i++){
            unset($arr[$i]);
        }
        //再把截取的数字插入到数组开头
        // array_unshift($arr,$tmp);//这样是吧数组插入开头了
        for($j=$k-1;$j>=0;--$j){
            array_unshift($arr,$tmp[$j]);
        }
        print_r($arr);
    }
}
rorate($arr,10);
View Code

//不知道空间复杂度为1 是什么情况。但是如果说不考虑空间复杂度的话,我想到的方法是:1.从数组末尾截取k个数字,然后插入到开头。
// 2.for循环k次,从末尾弹出一个数字放在开头

面试题(程序02)

原文:https://www.cnblogs.com/bneglect/p/10986845.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!