63.轮转数组

作者: wo不是黄蓉 | 来源:发表于2022-02-23 19:54 被阅读0次

    day:14 189. 轮转数组(中等)
    考点:双指针
    思路:

    • 第一种解法:新建一个数组,计算每个位置该放的元素,将新数组中的值copy到原数组
    • 官网第二种解法没有看懂
    • 第三种解法:反转整个数组,,以k为界限分别反转[0,k/n-1]区间的元素和[k/n,n-1]区间的元素。至于为什么要界限定在k/n-1是因为需要保证k值的正确性,k最大为数组的长度,此时岂不是修改了k的长度。
      使用额外数组
    var rotate = function(nums, k) {
        let n = nums.length,newArr = [];
       for(let i =0;i<n;i++){
          newArr[(i+k)%n]=nums[i]
        }
        for(let i = 0;i<n;i++){
          nums[i] = newArr[i]
        }
    };
    

    反转数组

    //反转数组
    function revese(nums,start,end){
      while(start<end){
         //交换数组元素
        [nums[start], nums[end]] = [nums[end], nums[start]];
        start +=1;
        end -= 1;
      }
    }
    var rotate = function(nums, k) {
       let k = k%nums.length;
      reverse(nums, 0, nums.length - 1);
      reverse(nums,0,k%nums.length-1);
      reverse(nums,k%nums.length,nums.length-1);
    };
    

    相关文章

      网友评论

        本文标题:63.轮转数组

        本文链接:https://www.haomeiwen.com/subject/xjxalrtx.html