Rotate an array of n elements to the right by k steps.

For example, with n=7 and k=3, the array [1,2,3,4,5,6,7] is rotated to [5,6,7,1,2,3,4].

Note:
Try to come up as many solutions as you can, there are at least 3 different ways to solve this problem.

解题思路1

首先把数组复制一遍,然后找到元素之间的映射关系: newnum[i] = oldnum[(i - k + n) % n],时间复杂度为O(n),空间复杂度为O(n)

实现代码1

/******************************************************************  @Author   : 楚兴*  @Date     : 2015/2/24 16:58*  @Status   : Accepted*  @Runtime  : 33 ms
******************************************************************/
class Solution {
public:void rotate(int nums[], int n, int k) {int *temp = new int[n];memcpy(temp, nums, n * sizeof(int));k = k % n;for (int i = 0; i < n; i++){nums[i] = temp[(i - k + n) % n];}delete [] temp;}
};

解题思路2

将数组看成是一个环,每个元素每次往前走一步,循环k次。时间复杂度为O(k*n),耗时较长,空间复杂度为O(1)

实现代码2

/*****************************************************************
    *  @Author   : 楚兴
    *  @Date     : 2015/2/24 17:10
    *  @Status   : Accepted
    *  @Runtime  : 872 ms
******************************************************************/
class Solution {
public:
    void rotate(int nums[], int n, int k) {        k = k % n;
        while (k--)
        {            int temp = nums[n - 1];
            for (int i = n - 1; i > 0; i--)
            {                nums[i] = nums[i - 1];
            }
            nums[0] = temp;
        }
    }
};

解题思路3

①将整个数组反转
②将由分割点分割的两个数组分别反转
即:1 2 3 4 5 6 7 -> 7 6 5 | 4 3 2 1 -> 5 6 7 | 1 2 3 4
时间复杂度为O(n),空间复杂度为O(1)

实现代码3

/******************************************************************  @Author   : 楚兴*  @Date     : 2015/2/24 17:39*  @Status   : Accepted*  @Runtime  : 25 ms
******************************************************************/
class Solution {
public:void rotate(int nums[], int n, int k) {k = k % n;rev(nums, 0, n - 1);rev(nums, 0, k - 1);rev(nums, k, n - 1);}void rev(int num[], int left, int right){int temp;while (left < right){temp = num[left];num[left++] = num[right];num[right--] = temp;}}
};

[LeetCode] Rotate Array相关推荐

  1. LeetCode Rotate Array(数组的旋转)

    Rotate an array of n elements to the right by k steps. For example, with n = 7 and k = 3, the array  ...

  2. leetcode Rotate Array 旋转数组

    Rotate an array of n elements to the right by k steps. For example, with n = 7 and k = 3, the array ...

  3. [勇者闯LeetCode] 189. Rotate Array

    [勇者闯LeetCode] 189. Rotate Array Description Rotate an array of n elements to the right by k steps. F ...

  4. leetcode-189. Rotate Array

    189. Rotate Array Rotate an array of n elements to the right by k steps. For example, with n = 7 and ...

  5. leetcode Patching Array

    题意:给定一个数组nums和一个数n,求添加最少的数使得[1,n]中的每个数都可以由数组中元素和组成用known_sum表示已知的连续和为[1,known_sum),有了这个表示那就简单了: nums ...

  6. leetcode python3 简单题189. Rotate Array

    1.编辑器 我使用的是win10+vscode+leetcode+python3 环境配置参见我的博客: 链接 2.第一百八十九题 (1)题目 英文: Given an array, rotate t ...

  7. 【LeetCode从零单排】No189 .Rotate Array

    题目 Rotate an array of n elements to the right by k steps. For example, with n = 7 and k = 3, the arr ...

  8. LeetCode之Rotate Array

    1.题目 Rotate an array of n elements to the right by k steps. For example, with n = 7 and k = 3, the a ...

  9. LeetCode 189. Rotate Array

    题目: Rotate an array of n elements to the right by k steps. For example, with n = 7 and k = 3, the ar ...

  10. C#LeetCode刷题之#189-旋转数组(Rotate Array)

    问题 该文章的最新版本已迁移至个人博客[比特飞],单击链接 https://www.byteflying.com/archives/3700 访问. 给定一个数组,将数组中的元素向右移动 k 个位置, ...

最新文章

  1. 神经网络压缩方法:模型量化的概念简介
  2. python如何输入数字赋值_三、python语法(定义,赋值,注释,输入输出)
  3. 精通python网络爬虫-精通python网络爬虫
  4. Re:[转]如何基于discuz开发网站通行证的功能
  5. 【今日头条】头条号图文发布页面的“扩展链接”是干嘛用的?
  6. python里面对文件的读写操作
  7. docker 镜像上传至hub时报错,提示:denied: requested access to the resource is denied
  8. 编写你的第一个 Django 应用,第 3 部分
  9. WebMagic学习-解析json
  10. 修改Tomcat编码方式的两种方法
  11. 一步步编写操作系统 42 用c语言编写内核
  12. 的ui在vs中显示没有成员_在电脑桌面使用敬业签团队便签怎么设置新增内容在上面显示?...
  13. mysql一次运行多个SQL文件
  14. 综合案例-注册页面(HTML)
  15. ValueError: This model has not yet been built. Build the model first by calling `build()` or calling
  16. mac matlab 模糊,MATLAB 2014a 在Mac OS X yosemite 10.10 Retina显示模糊的解决办法
  17. android打印处理服务已停止,Print Spooler服务停止 打印机服务无法启动的完美解决方案共享...
  18. 中国海蜇产业发展现状及建议分析,辽宁省是我国最主要的养殖产地「图」
  19. Android的View事件分发机制原理
  20. spring boot中如何实现在手机注册和登录时获取验证码(阿里短信服务)

热门文章

  1. Python爬取豆瓣电影
  2. 《剑指offer》面试题16——反转链表(C++)
  3. R中Matrix and TMB package version issues
  4. icesat2 重要参数
  5. ENVI实验教程(4)实验四、遥感图像预处理—融合、镶嵌、裁剪
  6. Android GC机制介绍
  7. JavaSE学习--集合02
  8. android通过手机热点通信
  9. python 安装了不能用_解决Python安装后pip不能用的问题
  10. php 多个files 数量,php – 具有多个字段时$_FILES数组的奇怪格式