[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 [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相关推荐
- 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 ...
- 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 ...
- [勇者闯LeetCode] 189. Rotate Array
[勇者闯LeetCode] 189. Rotate Array Description Rotate an array of n elements to the right by k steps. F ...
- 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 ...
- leetcode Patching Array
题意:给定一个数组nums和一个数n,求添加最少的数使得[1,n]中的每个数都可以由数组中元素和组成用known_sum表示已知的连续和为[1,known_sum),有了这个表示那就简单了: nums ...
- leetcode python3 简单题189. Rotate Array
1.编辑器 我使用的是win10+vscode+leetcode+python3 环境配置参见我的博客: 链接 2.第一百八十九题 (1)题目 英文: Given an array, rotate t ...
- 【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 ...
- 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 ...
- 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 ...
- C#LeetCode刷题之#189-旋转数组(Rotate Array)
问题 该文章的最新版本已迁移至个人博客[比特飞],单击链接 https://www.byteflying.com/archives/3700 访问. 给定一个数组,将数组中的元素向右移动 k 个位置, ...
最新文章
- 神经网络压缩方法:模型量化的概念简介
- python如何输入数字赋值_三、python语法(定义,赋值,注释,输入输出)
- 精通python网络爬虫-精通python网络爬虫
- Re:[转]如何基于discuz开发网站通行证的功能
- 【今日头条】头条号图文发布页面的“扩展链接”是干嘛用的?
- python里面对文件的读写操作
- docker 镜像上传至hub时报错,提示:denied: requested access to the resource is denied
- 编写你的第一个 Django 应用,第 3 部分
- WebMagic学习-解析json
- 修改Tomcat编码方式的两种方法
- 一步步编写操作系统 42 用c语言编写内核
- 的ui在vs中显示没有成员_在电脑桌面使用敬业签团队便签怎么设置新增内容在上面显示?...
- mysql一次运行多个SQL文件
- 综合案例-注册页面(HTML)
- ValueError: This model has not yet been built. Build the model first by calling `build()` or calling
- mac matlab 模糊,MATLAB 2014a 在Mac OS X yosemite 10.10 Retina显示模糊的解决办法
- android打印处理服务已停止,Print Spooler服务停止 打印机服务无法启动的完美解决方案共享...
- 中国海蜇产业发展现状及建议分析,辽宁省是我国最主要的养殖产地「图」
- Android的View事件分发机制原理
- spring boot中如何实现在手机注册和登录时获取验证码(阿里短信服务)