/*
* To change this license header, choose License Headers in Project Properties.
* To change this template file, choose Tools | Templates
* and open the template in the editor.
*/
package Test;
import java.util.Arrays;
/**
*
* 2.17 数组循环移位
*/
public class ReverseArray {
public static void main(String[] args) {
int[] array = new int[]{1,2,3,4,5,6,7,8};
//解法一
int[] a1 = reverse_array1(array,array.length,6);
System.out.println(Arrays.toString(a1));
//解法二
int[] array2 = new int[]{1,2,3,4,5,6,7,8};
int[] a2 = reverse_array2(array2,array2.length,6);
System.out.println(Arrays.toString(a2));
//解法三 多用了一个数组的办法,附件变量超过两个
int[] array3 =new int[]{1,2,3,4,5,6,7,8};
int[] a3 = reverse_array3(array3,array3.length,6);
System.out.println(Arrays.toString(a3));
}
private static int[] reverse_array1(int[] array,int n ,int k) {
k %=n;
while(k>0){
int t = array[n-1];
for(int i =n-1;i>0;i--)
array[i]=array[i-1];
array[0] = t;
k--;
}
return array;
}
private static int[] reverse_array2(int[] array, int n, int k) {
k %=n;
reverse(array,0,n- k-1);
reverse(array,n-k,n-1);
reverse(array,0,n-1);
return array;
}
private static void reverse(int[] array, int b, int e) {
for(;b<e;b++,e--){
int tmp = array[e];
array[e] = array[b];
array[b] = tmp;
}
}
private static int[] reverse_array3(int[] array, int n, int k) {
k %=n;
int[] a = new int[n];
for(int i =0;i<n;i++){
int num = i+k>=n?((i+k)%n):(i+k);
a[num] = array[i];
}
return a;
}
}
编程之美2.17数组循环移位Java版
最新推荐文章于 2020-07-15 12:49:17 发布