旋轉(zhuǎn)數(shù)組

一個數(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--;
        }
    }
}

?著作權歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

相關閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容