试设计一个算法,将数组A(0..n-1)中的元素循环右移k位,并要求空间复杂度为O(1),时间复杂度为O(n)。
2013-08-22 08:44
761 查看
以1 2 3 4 5 6 7 8 9 10,向右移动2位为例 :
1、将1 2 3 4 5 6 7 8 反转 1 2 3 4 5 6 7 8 9 10 => 8 7 6 5 4 3 2 1 9 10
2、将9 10反转 8 7 6 5 4 3 2 1 9 10=> 8 7 6 5 4 3 2 1 10 9
3、将整个串反转 8 7 6 5 4 3 2 1 10 9=>9 10 1 2 3 4 5 6 7 8
实现了右移2位的操作。
Code(C):
1、将1 2 3 4 5 6 7 8 反转 1 2 3 4 5 6 7 8 9 10 => 8 7 6 5 4 3 2 1 9 10
2、将9 10反转 8 7 6 5 4 3 2 1 9 10=> 8 7 6 5 4 3 2 1 10 9
3、将整个串反转 8 7 6 5 4 3 2 1 10 9=>9 10 1 2 3 4 5 6 7 8
实现了右移2位的操作。
Code(C):
#include<stdio.h> void tran(int a[],int k,int n); void reverse(int a[],int s,int e); int main() { int a[10] = {1,2,3,4,5,6,7,8,9,10}; int k,i; printf("请输入右移的次数\n"); scanf("%d",&k); tran(a,k,10); for(i = 0;i < 10;i++) { printf("%d ",a[i]); } printf("\n"); return 0; } void tran(int a[],int k,int n) { if(k >= n) k = k%n; reverse(a,0,n-k-1); reverse(a+(n-k),0,k-1); reverse(a,0,n-1); } void reverse(int a[],int s,int e) { int temp; while(s < e) { temp = a[s]; a[s] = a[e]; a[e] = temp; s++; e--; } }
相关文章推荐
- 把一个含有N个元素的数组循环右移K位, 要求时间复杂度为O(N)
- 《数据结构》2.10设计一个算法,删除顺序表中值为item的元素,要求算法的时间复杂度是O(n),空间复杂度是O(1)
- 一个数组中除了两个数字之外,其余数字均出现了两次,如{1,2,3,4,5,3,2,1}.查找出这两个只出现一次的数字。要求时间复杂度为O(n),空间复杂度为O(1)。
- 一串首尾相连的珠子(m个),有N种颜色(N《=10),设计一个算法,取出其中一段,要求包含所有N中颜色,并使长度最短。并分析时间复杂度与空间复杂度
- 把一个数组向右循环移动k位要求时间复杂度为O(n)
- 整数数组中,每个元素均出现两次,除了一个元素例外,如何找出这个元素?能否设计一个线性时间的算法,且不需要额外的存储空间?
- 给定一个存放整数的数组,重新排列数组使得数组左边为奇数,右边为偶数。要求:空间复杂度O(1),时间复杂度为O(n)
- 百度笔试:给定一个存放整数的数组,重新排列数组使得数组左边为奇数,右边为偶数。 要求:空间复杂度O(1),时间复杂度为O(n)
- 4.给定一个存放整数的数组,重新排列数组使得数组左边为奇数,右边为偶数。 要求:空间复杂度O(1),时间复杂度为O(n)
- 一串首尾相连的珠子(m 个),有N 种颜色(N<=10),设计一个算法,取出其中一段,要求包含所有N 中颜色,并使长度最短。并分析时间复杂度与空间复杂度。
- 已知一个整数数组A[n],写出算法实现将奇数元素放在数组的左边,将偶数放在数组的右边。要求时间复杂度为O(n)。
- 一个整型数组里除了两个数字之外,其他的数字都出现了两次。 请写程序找出这两个只出现一次的数字。要求时间复杂度是O(n), 空间复杂度是O(1)
- 一串首尾相连的珠子(m 个),有N 种颜色(N<=10),设计一个算法,取出其中一段,要求包含所有N 中颜色,并使长度最短。并分析时间复杂度与空间复杂度。
- 找出一个数组中出现次数超过一半的那个数字,要求时间复杂度O(n)和空间复杂度为O(1)。
- 一个数组中,存在两个只出现一次的数字,其余的数字均出现两次。要求在时间复杂度o(n),空间复杂度为o(1)的情况下找出这两个数字
- 一串首尾相连的珠子(m个),有N种颜色(N《=10),设计一个算法,取出其中一段,要求包含所有N中颜色,并使长度最短。并分析时间复杂度与空间复杂度。
- 一串首尾相连的珠子(m个),有N种颜色(N《=10),设计一个算法,取出其中一段,要求包含所有N中颜色,并使长度最短。并分析时间复杂度与空间复杂度。
- 一个整型数组里除了一个或者两个或者三个数字之外,其他的数字都出现了两次。请写程序找出这两个只出现一次的数字。要求时间复杂度是O(n),空间复杂度是O(1)
- N个元素的数组循环右移K位,要求时间复杂度为O(N)
- 一个整型数组里除了一个数字之外,其他的数字都出现了两次。要求时间复杂度是O(n),空间复杂度是O(1),如何找出数组中只出现一次的数字