一個數(shù)組A中存有 n 個整數(shù),在不允許使用另外數(shù)組的前提下试读,將每個整數(shù)循環(huán)向右移 M( M >=0)個位置,即將A中的數(shù)據(jù)由(A0 A1 ……AN-1 )變換為(AN-M …… AN-1 A0 A1 ……AN-M-1 )(最后 M 個數(shù)循環(huán)移至最前面的 M 個位置)。如果需要考慮程序移動數(shù)據(jù)的次數(shù)盡量少裂逐,要如何設計移動的方法?
可以考慮三層循環(huán)
數(shù)組1泣栈,2卜高,3弥姻,4,5掺涛,6 數(shù)組長度 6庭敦,反轉(zhuǎn)2,
第一次反轉(zhuǎn):6薪缆,5秧廉,4,3拣帽,2定血,1
第二次反轉(zhuǎn):5,6诞外,4澜沟,3,2峡谊,1
第三次反轉(zhuǎn):5茫虽,6,1既们,2濒析,3,4
import java.util.*;
public class Solution {
/**
* 旋轉(zhuǎn)數(shù)組
* @param n int整型 數(shù)組長度
* @param m int整型 右移距離
* @param a int整型一維數(shù)組 給定數(shù)組
* @return int整型一維數(shù)組
*/
public int[] solve (int n, int m, int[] a) {
// write code here
//例如n = 6 啥纸,m = 7 這種情況需要會出現(xiàn)數(shù)字越界号杏,并且長度為n旋轉(zhuǎn)沒有變化,所以進行取余
m = m%n;
reverse(a,0,n-1);
reverse(a,0,m-1);
reverse(a,m,n-1);
return a;
}
public void reverse(int[] num,int start,int end){
while(start<end){
int temp = num[end];
num[end] = num[start];
num[start] = temp;
start++;
end--;
}
}
}