数组旋转
2016-12-05 13:17
183 查看
题目:返回将一维数组向右旋转k个位置的结果。比如,一维数组{1,2,3,4,5},当k=2时,返回结果是{4,5,1,2,3}。要求常数级空间复杂度,允许修改原有数组。
R语言自带的rev函数
自己写的翻转函数
就这样解密了R语言中的rev源代码啦!~~~~
伪代码
int [] rotataK(int [] A,int k) { if (A == null || k >= A.length) return A; reverse(A,0,A.length-1);//反转整个数组 reverse(A,0,k-1);//反转前k个数 reverse(A,k,A.length-1);//反转剩下的数 return A; } //辅助函数,反转从start到end的数 void reverse (int [] A,int start,int end) { while (start < end) { //交换A[start]和A[end]两个数 int temp = A[start] A[start] = A[end] start++; end--; } }
R语言
R语言实现这个功能上,采用两种方式:R语言自带的rev函数
自己写的翻转函数
R语言带的rev函数
rotateK <- function(a,k) { if (is.null(a) || length(a) <= k) return(a) a <- rev(a) b <- rev(a[1:k]) b1 <- rev(a[(k+1):length(a)]) b <- append(b,b1) return (b) } > a<-c(1,2,3,4,5) > a [1] 1 2 3 4 5 > k=2 > rotateK(a,k) [1] 4 5 1 2 3
自定义的翻转函数
fanzhuan <- function(a,start,end) { while(start < end) { temp = a[start] a[start] = a[end] a[end] = temp start = start + 1 end = end - 1 } return(a) } rotateK_1 <- function(a,k) { if (is.null(a) || length(a) <= k) { return(a) } a <- fanzhuan(a,1,length(a)) b <- fanzhuan(a,1,k) b1 <- fanzhuan(a,(k+1),length(a)) b <- append(b[1:k],b1[(k+1):length(a)]) return (b) } > a<-c(1,2,3,4,5) > fanzhuan(a,1,5) [1] 5 4 3 2 1 > rev(a) [1] 5 4 3 2 1
两种方法的比较
k =2
> #k=2 > a<-c(1,2,3,4,5) > k=2 > rotateK(a,k) [1] 4 5 1 2 3 > #k=2 > k=2 > a<-c(1,2,3,4,5) > rotateK_1(a,k) [1] 4 5 1 2 3
k =3
> #k=3 > a<-c(1,2,3,4,5) > k=3 > rotateK(a,k) [1] 3 4 5 1 2 > #k=3 > k=3 > a<-c(1,2,3,4,5) > rotateK_1(a,k) [1] 3 4 5 1 2
k = 4
> #k=4 > a<-c(1,2,3,4,5) > k=4 > rotateK(a,k) [1] 2 3 4 5 1 > #k=4 > k=4 > a<-c(1,2,3,4,5) > rotateK_1(a,k) [1] 2 3 4 5 1
就这样解密了R语言中的rev源代码啦!~~~~
python
这里写代码片
相关文章推荐
- 旋转数组的最小数字
- 【剑指Offer面试编程题】题目1386:旋转数组的最小数字--九度OJ
- 旋转数组中的最小值
- 数组的旋转
- 字符串算法——旋转数组中查找目标值(有重复元素)( Search in Rotated Sorted Array II)
- Leetcode--Search in Rotated Sorted Array(旋转数组的查找)
- C++算法之 旋转数组的最小数字
- 旋转数组中的最小元素
- 剑指offer---旋转数组中最小的数字(8)
- 第六十九题(旋转数组中的最小元素)
- ~旋转数组中的最小数字~
- leetcode之数组类之数组的旋转与分治类-----OJ 189/33/81/153/154 数组旋转 旋转数组搜索 88 有序数组合并 4 两个有序数组寻找第K个元素/中位数 35 寻找插入位置
- 旋转数组的最小数字
- 剑指offer面试题8——旋转数组的最小数字
- 程序员面试金典: 9.11 排序与查找 11.3找出已排序数组经过旋转后某个元素
- 编程珠玑--杂技算法--字符串、数组的旋转
- 旋转数组中的最小元素
- 剑指offer_6 旋转数组最小的数字
- 牛客网剑指offer—旋转数组的最小数字
- 将一个4X4的数组进行逆时针旋转90度后输出,要求原数组数据随机输入