LeetCode 189. 旋转数组(环形替换)
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. 旋转数组(环形替换)相关推荐
- Leetcode 189. 旋转数组 解题思路及C++实现
方法一:暴力方法 解题思路: 用栈存储后面的 k 个元素,然后将 nums 数组的元素往后挪 k 位,然后再将栈中的元素存进nums数组中. class Solution { public:void ...
- Leetcode 189. 旋转数组 (每日一题 20210909)
给定一个数组,将数组中的元素向右移动 k 个位置,其中 k 是非负数.进阶:尽可能想出更多的解决方案,至少有三种不同的方法可以解决这个问题. 你可以使用空间复杂度为 O(1) 的 原地 算法解决这个问 ...
- leetcode(189) 旋转数组
**给定一个数组,将数组中的元素向右移动 k 个位置,其中 k 是非负数. 进阶: 尽可能想出更多的解决方案,至少有三种不同的方法可以解决这个问题. 你可以使用空间复杂度为 O(1) 的 原地 算法解 ...
- leetcode 189. 旋转数组
题目 思路 先左边翻转,再右边翻转,最后整体翻转. 注意存在翻转超过一个周期的情况,要先取余,避免越界. 题解 class Solution {public void rotate(int[] num ...
- 数组元素替换_LeetCode 题解 | 189. 旋转数组
力扣 189. 旋转数组(点击查看题目) 题目描述 给定一个数组,将数组中的元素向右移动 k 个位置,其中 k 是非负数. 示例 1: 示例 2: 说明: 尽可能想出更多的解决方案,至少有三种不同的方 ...
- LeetCode-数组-189. 旋转数组
描述 189. 旋转数组 给定一个数组,将数组中的元素向右移动 k 个位置,其中 k 是非负数. 进阶: 尽可能想出更多的解决方案,至少有三种不同的方法可以解决这个问题. 你可以使用空间复杂度为 O( ...
- 189. 旋转数组 golang
一个引出较多知识点的题 关于golang的append函数的踩坑 剑指offer-翻转字符串 557. 反转字符串中的单词 III 题目 189. 旋转数组 给定一个数组,将数组中的元素向右移动 k ...
- 刷爆LeetCode之旋转数组
旋转数组 给定一个数组,将数组中的元素向右移动 k 个位置,其中 k 是非负数. 示例 1: 输入: [1,2,3,4,5,6,7]和 k = 3 输出: [5,6,7,1,2,3,4] 解释: 向右 ...
- LeetCode 初级 - 旋转数组
旋转数组 给定一个数组,将数组中的元素向右移动 k 个位置,其中 k 是非负数. 示例 1: 输入: [1,2,3,4,5,6,7] 和 k = 3 输出: [5,6,7,1,2,3,4] 解释: 向 ...
最新文章
- 【linux】Matchbox(二):基本概念
- WinForm导出文件,你懂的……
- java读取文件效率问题
- DirectX和DirectShow介绍和区别
- 阅读好书依然是提升自己的高效方法:兼以作者的身份告诉大家如何选择书,以及高效学习的方法...
- easyui tree复选框是否打钩状态_实战PyQt5: 010-复选框控件QCheckBox
- threejs加载模型挤压变形_车用水阀套零件冷挤压成形数值模拟试验研究
- 如何在Windows Defender中安排扫描
- 深度学习笔记--单层感知机原理及代码实现
- 快速获得数据库连接字符串的小窍门
- 快上车,带你了解HiLens Studio六大优势
- 懒人修仙传ce修改方法_专访|《凡人修仙传》原著作者忘语:“韩老魔”原型是我...
- JavaScript==比较的规则
- Tokenview:当前Filecash网络目前总质押量约为627926枚FIC
- c语言识别按了esc键_憋了三年,史上最全的 F1~F12 键用法整理出来了
- 音响话筒鸣叫测试软件,音响助手:可跨平台USB测试麦,秒变手机测量话筒
- java 微信公众号发红包_微信公众号如何给用户发红包?
- win 10 安装单点Spark+Hadoop+Python环境
- Pythton学习笔记1
- 安卓rom包解包linux,[ROM开发]解包打包ROM详细教程 2017.9.8更新安卓7.0
热门文章
- 从static变量导出问题解析 __declspec(dllexport) 和 __declspec(dllimport)的作用
- java几种删除_几种删除Linux目录的方法
- C++多态相关关问题及虚表剖析
- 精读linux源码,Linux基础入门的操作精读.doc
- java compliance_java complier compliance level问题引发的思考
- 输入框设置只能输入数字
- 错误 Every derived table must have its own alias
- java中finalizer终结方法学习心得
- JCP执行委员会新成员选举结果揭晓:Hologic未获通过
- 把一个数据库的数据插入到另外一个数据库