【力扣经典面试题】189. 轮转数组

题目描述:

给定一个整数数组 nums,将数组中的元素向右轮转 k 个位置,其中 k 是非负数。

示例 1:

输入: nums = [1,2,3,4,5,6,7], k = 3
输出: [5,6,7,1,2,3,4]
解释:
向右轮转 1 步: [7,1,2,3,4,5,6]
向右轮转 2 步: [6,7,1,2,3,4,5]
向右轮转 3 步: [5,6,7,1,2,3,4]

示例 2:

输入:nums = [-1,-100,3,99], k = 2
输出:[3,99,-1,-100]
解释: 
向右轮转 1 步: [99,-1,-100,3]
向右轮转 2 步: [3,99,-1,-100]

题解方法:

方法一:

最简单的方法就是将原数组按顺序遍历,将数组元素根据要求放入在一个新数组特定位置上,然后将新数组拷贝到原数组中即可。具体而言,明确原数组的长度大小n,以及需要轮转的k;根据取模计算方法,将原数组下标为 i 的元素放至新数组下标为 (i+k) mod  n 的位置。

//  核心代码 即遍历并复制元素到新的数组中
 for(int i = 0; i <n; ++i){
        arr[(i+k)%n] = nums[i];
    }

力扣运行完整代码:

class Solution {
public:
    void rotate(vector<int>& nums, int k) {
    int n = nums.size();
    vector<int> arr(n);
    for(int i = 0; i <n; ++i){
        arr[(i+k)%n] = nums[i];
    }
    nums.assign(arr.begin(), arr.end());
    }
};

执行用时:

方法二:

根据题目需要将数组的元k次后,尾部 k mod n 个元素会移动至数组头部,数组剩余元素也会向后移动 k mod  n个位置。

通过将数组翻转的方法可以实现元素的k次移动。第一步,将数组所有元素翻转,这样可以实现将尾部的 k mod n个元素就被移至数组头部;第二步,再翻转 [0,  k  mod  n−1]区间的元素和 [k mod n,n−1]区间的元素。最后得到答案。

class Solution {
public:
    void  reverse(vector<int>& nums, int start, int end){
         while(start < end){
       //通过调用交换函数,实现数组中的前后两两元素交换。
       swap(nums[start], nums[end]);
       start +=1;  //start从数组前面开始遍历
       end -=1; //end从数组后面开始遍历
   }
    }
    
    void rotate(vector<int>& nums, int k) {
        k %= nums.size();
        reverse(nums,0,nums.size()-1);
        reverse(nums, 0 ,k -1);
        reverse(nums,k , nums.size()-1);
    }
};

执行用时: 

总结:

   解题方法不唯一。本题可以使用空间复杂度为 O(1) 的 原地 算法解决这个问题吗?欢迎评论区留言哦

相关推荐

  1. 面试150轮转数组

    2024-02-01 12:06:02       45 阅读
  2. 189.轮转数组

    2024-02-01 12:06:02       17 阅读
  3. 189. 轮转数组

    2024-02-01 12:06:02       12 阅读
  4. 【LeetCode】面试经典150189.轮转数组

    2024-02-01 12:06:02       10 阅读
  5. 100_普通数组_189_轮转数组

    2024-02-01 12:06:02       18 阅读
  6. 100】189.轮转数组

    2024-02-01 12:06:02       43 阅读
  7. Leetcode面试经典150_Q189轮转数组

    2024-02-01 12:06:02       14 阅读

最近更新

  1. TCP协议是安全的吗?

    2024-02-01 12:06:02       16 阅读
  2. 阿里云服务器执行yum,一直下载docker-ce-stable失败

    2024-02-01 12:06:02       16 阅读
  3. 【Python教程】压缩PDF文件大小

    2024-02-01 12:06:02       15 阅读
  4. 通过文章id递归查询所有评论(xml)

    2024-02-01 12:06:02       18 阅读

热门阅读

  1. 51单片机温湿度数据管理系统

    2024-02-01 12:06:02       32 阅读
  2. 【NGINX】NGINX如何阻止指定ip的请求

    2024-02-01 12:06:02       26 阅读
  3. 【issue-halcon例程学习】rim_simple.hdev

    2024-02-01 12:06:02       31 阅读
  4. 深度学习有何新进展?

    2024-02-01 12:06:02       32 阅读
  5. React和Vue实现路由懒加载

    2024-02-01 12:06:02       26 阅读
  6. SpringCloud

    2024-02-01 12:06:02       37 阅读
  7. 大数据之 Spark 比 MapReduce 快的原因

    2024-02-01 12:06:02       32 阅读
  8. Springboot项目多数据源配置详细步骤

    2024-02-01 12:06:02       32 阅读