1. 题目

给定一个数组,将数组中的元素向右移动 k 个位置,其中 k 是非负数。

示例 1:输入: [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]

要求使用空间复杂度为 O(1)原地 算法。

来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/rotate-array
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。

2. 解题

2.1 环形替换

class Solution {public:void rotate(vector<int>& nums, int k) {k = k%nums.size();if(k == 0)return;int i, j, j0, count = 0, prev, next = nums[0];for(i = 0; count < nums.size(); ++i){j0 = i;prev = nums[j0];while(i != j){j = (j0+k)%nums.size();next = nums[j];nums[j] = prev;j0 = j;prev = next;++count;}  }}
};

2.2 分段反转

n=7, k=3

原数组                    : 1 2 3 4 5 6 7
反转所有数字后             : 7 6 5   4 3 2 1
反转前 k 个数字后          : 5 6 7   4 3 2 1
反转后 n-k 个数字后        : 5 6 7   1 2 3 4 --> 结果
class Solution {public:void rotate(vector<int>& nums, int k) {k = k%nums.size();if(k == 0)return;reverse(nums.begin(), nums.end());reverse(nums.begin(),nums.begin()+k);reverse(nums.begin()+k, nums.end());}
};

LeetCode 189. 旋转数组(环形替换)相关推荐

  1. Leetcode 189. 旋转数组 解题思路及C++实现

    方法一:暴力方法 解题思路: 用栈存储后面的 k 个元素,然后将 nums 数组的元素往后挪 k 位,然后再将栈中的元素存进nums数组中. class Solution { public:void ...

  2. Leetcode 189. 旋转数组 (每日一题 20210909)

    给定一个数组,将数组中的元素向右移动 k 个位置,其中 k 是非负数.进阶:尽可能想出更多的解决方案,至少有三种不同的方法可以解决这个问题. 你可以使用空间复杂度为 O(1) 的 原地 算法解决这个问 ...

  3. leetcode(189) 旋转数组

    **给定一个数组,将数组中的元素向右移动 k 个位置,其中 k 是非负数. 进阶: 尽可能想出更多的解决方案,至少有三种不同的方法可以解决这个问题. 你可以使用空间复杂度为 O(1) 的 原地 算法解 ...

  4. leetcode 189. 旋转数组

    题目 思路 先左边翻转,再右边翻转,最后整体翻转. 注意存在翻转超过一个周期的情况,要先取余,避免越界. 题解 class Solution {public void rotate(int[] num ...

  5. 数组元素替换_LeetCode 题解 | 189. 旋转数组

    力扣 189. 旋转数组(点击查看题目) 题目描述 给定一个数组,将数组中的元素向右移动 k 个位置,其中 k 是非负数. 示例 1: 示例 2: 说明: 尽可能想出更多的解决方案,至少有三种不同的方 ...

  6. LeetCode-数组-189. 旋转数组

    描述 189. 旋转数组 给定一个数组,将数组中的元素向右移动 k 个位置,其中 k 是非负数. 进阶: 尽可能想出更多的解决方案,至少有三种不同的方法可以解决这个问题. 你可以使用空间复杂度为 O( ...

  7. 189. 旋转数组 golang

    一个引出较多知识点的题 关于golang的append函数的踩坑 剑指offer-翻转字符串 557. 反转字符串中的单词 III 题目 189. 旋转数组 给定一个数组,将数组中的元素向右移动 k ...

  8. 刷爆LeetCode之旋转数组

    旋转数组 给定一个数组,将数组中的元素向右移动 k 个位置,其中 k 是非负数. 示例 1: 输入: [1,2,3,4,5,6,7]和 k = 3 输出: [5,6,7,1,2,3,4] 解释: 向右 ...

  9. LeetCode 初级 - 旋转数组

    旋转数组 给定一个数组,将数组中的元素向右移动 k 个位置,其中 k 是非负数. 示例 1: 输入: [1,2,3,4,5,6,7] 和 k = 3 输出: [5,6,7,1,2,3,4] 解释: 向 ...

最新文章

  1. 【linux】Matchbox(二):基本概念
  2. WinForm导出文件,你懂的……
  3. java读取文件效率问题
  4. DirectX和DirectShow介绍和区别
  5. 阅读好书依然是提升自己的高效方法:兼以作者的身份告诉大家如何选择书,以及高效学习的方法...
  6. easyui tree复选框是否打钩状态_实战PyQt5: 010-复选框控件QCheckBox
  7. threejs加载模型挤压变形_车用水阀套零件冷挤压成形数值模拟试验研究
  8. 如何在Windows Defender中安排扫描
  9. 深度学习笔记--单层感知机原理及代码实现
  10. 快速获得数据库连接字符串的小窍门
  11. 快上车,带你了解HiLens Studio六大优势
  12. 懒人修仙传ce修改方法_专访|《凡人修仙传》原著作者忘语:“韩老魔”原型是我...
  13. JavaScript==比较的规则
  14. Tokenview:当前Filecash网络目前总质押量约为627926枚FIC
  15. c语言识别按了esc键_憋了三年,史上最全的 F1~F12 键用法整理出来了
  16. 音响话筒鸣叫测试软件,音响助手:可跨平台USB测试麦,秒变手机测量话筒
  17. java 微信公众号发红包_微信公众号如何给用户发红包?
  18. win 10 安装单点Spark+Hadoop+Python环境
  19. Pythton学习笔记1
  20. 安卓rom包解包linux,[ROM开发]解包打包ROM详细教程 2017.9.8更新安卓7.0

热门文章

  1. 从static变量导出问题解析 __declspec(dllexport) 和 __declspec(dllimport)的作用
  2. java几种删除_几种删除Linux目录的方法
  3. C++多态相关关问题及虚表剖析
  4. 精读linux源码,Linux基础入门的操作精读.doc
  5. java compliance_java complier compliance level问题引发的思考
  6. 输入框设置只能输入数字
  7. 错误 Every derived table must have its own alias
  8. java中finalizer终结方法学习心得
  9. JCP执行委员会新成员选举结果揭晓:Hologic未获通过
  10. 把一个数据库的数据插入到另外一个数据库