以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 102、将9 10反转 8 7 6 5 4 3 2 1 9 10=> 8 7 6 5 4 3 2 1 10 93、将整个串反转 8 7 6 5 4 3 2 1 10 9=>9
5.18⑤
试
设计
一个
算法
,将
数组
A
中
的
元素
A[0..n-1]
循环右移
k
位
,并
要求
只用
一个
元素
大小的附加存储,
元素
移动或交换次数为O(n)。
要求
实现以下函数:
试
设计
一个
算法
,将
数组
A
中
的
元素
A[0..n-1]
循环右移
k
位
,并
要求
只用
一个
元素
大小的附加存储,
元素
移动或交换次数为O(n)。
一维
数组
类型Array1D的定义:
typedef ElemType Array1D[MAXLEN];
方法一:蛮力法
要求
将
数组
元素
循环右移
K
位
,只需要每次将
数组
中
元素
右移一
位
,循环K次即可。如原
数组
为abcd1234,右移4
位
具体移动过程为abcd1234-->4abcd123-->34abcd12-->1234abcd。
一个
数组
A
中
存有N(N>0)个整数,在不允许使用另外
数组
的前提下,将每个整数循环向右移M(M>=0)个
位
置,即将A
中
的数据由(A0A1……AN-1)变换为(AN-M …… AN-1 A0 A1……AN-M-1)(最后M个数循环移至最前面的M个
位
置)。如果需要考虑程序移动数据的次数尽量少,要如何
设计
移动的方法?
输入格式:每个输入包含
一个
测
试
用例,第1行输入N ( 1<=N<...
设计
算法
,将存有n(n>0)个数的
数组
A
中
的
元素
A[0]至A[n-1]
循环右移
k(k>0)
位
,
要求
只允许使用
一个
元素
大小的附加存储,
元素
移动或交换次数为O(n)。
void rightmove(int array[], int k,int number)
int s, t, m, p, q;
s = 0;
t = 0;
m = 0;
p = array[s];
whil...
问题描述:借助
一个
栈把
一个
数组
中
的数据
元素
逆置
涉及变量:list:int[]型变量,
数组
,可用其他类型的变量代替
涉及教材:《数据结构——Java语言描述(第2版)》 清华大学出版社
大致思路:利用栈的性质,栈是先进后出,所以有两种方法
1.先将
数组
中
的数据
元素
按0==>n-1的顺序入栈,完成后再将栈里的
元素
依次出栈到
数组
中
0 ==> n-1的
位
置
2.可以将
数组
中
的
元素
从...
可以通过三步翻转法实现。具体来说,先将整个
数组
翻转,然后将前m个
元素
翻转,再将剩下的n-m个
元素
翻转即可。这样,
数组
就完成了
循环右移
m
位
的操作。
以下是实现代码:
def rotate_array(nums, m):
n = len(nums)
m = m % n
# 翻转整个
数组
reverse(nums, 0, n - 1)
# 翻转前m个
元素
reverse(nums, 0, m - 1)
# 翻转剩下的n-m个
元素
reverse(nums, m, n - 1)
def reverse(nums, start, end):
while start < end:
nums[start], nums[end] = nums[end], nums[start]
start += 1
end -= 1
其
中
,reverse函数用于翻转
数组
中
任意一段区间,rotate_array函数则是利用三步翻转法实现
循环右移
操作。
空间复杂度
为O(1),符合
要求
。