Java实现数组移动_用Java实现数组向右的循环移动

一、题目:实现数组的向右循环移动

二、解题思路:

1、 举个例子:

(1) a[1,2,3,4,5,6]向右循环移动2位,那我们知道结果为a[5,6,1,2,3,4],其示范为:

1->3,3->5,5->1

2->4,4->6,6->2这样两遍下来就得到了所要的结果

(2)a[1,2,3,4,5,6,7]向右循环移动3位,那我们知道结果为a[5,6,7,1,2,3,4],其示范为:

1->4,4->7,7->3,3->6,6->2,2->5,5->1这样一遍下来就得到了所要的结果

所以我们将数组元素的个数n跟所要移动的位数k的关系分为两种(m=min(k,n-k)):其一就是n%m==0,进行m遍可以得到结果,其二就是n%m!=0,进行一遍就可以得到结果。

2、为了节约时间和空间,我们可以用变量来记录所覆盖的数组元素。

三、源代码

1、定义一个函数:

public static void move(Integer[] a, Integer k) {

Integer n = a.length;

Integer m = Math.min(k, n - k);

Integer i, j;

2、一次执行到底即n%m!=0

if (n % m != 0) {

Integer start = 0;

//Integer now = start;

Integer to = (start + k) % n;

Integer getdata;

Integer setdata=a[start];

while (to != start) {

getdata = a[to];

a[to] = setdata;

to = (to + k) % n;

setdata = getdata;

}

a[to]=setdata;

}

3、m次执行到底即n%m==0

else {

Integer start = 0;

Integer now=start;

Integer to = (now + k) % n;

Integer getdata;

Integer setdata=a[start];

for (i = 0; i < m; i++) {

start=i;

setdata=a[start];

to=(start+k)%n;

now=to;

while(now!=start) {

getdata = a[to];

a[to] = setdata;

now=to;

to = (to + k) % n;

setdata = getdata;

}

}

}

4、主函数

public class shuzu {

public static void main(String[] args) {

Integer[] data = { 1, 2, 3, 4, 5, 6,7};

move(data, 3);

}

水木轩昊昊

public class shuzu {

public static void main(String[] args) {

Integer[] data = { 1, 2, 3, 4, 5, 6,7};

move(data, 3);

}

if (n % m != 0) {

Integer start = 0;

//Integer now = start;

Integer to = (start + k) % n;

Integer getdata;

Integer setdata=a[start];

while (to != start) {

getdata = a[to];

a[to] = setdata;

to = (to + k) % n;

setdata = getdata;

}

a[to]=setdata;

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值