問題描述:給定乙個整數陣列,長度為n,現在要求該陣列迴圈右以m個元素。
例如,陣列為{1,2,3,4,5,6,7,8,9},迴圈右移3個元素後為變成{7,8,9,1,2,3,4,5,6}
解法一:輔助空間法,思路很簡單,就是另外開闢一塊和原來陣列一樣大小的空間。然後先把原來陣列的最後面的m個元素複製到
新陣列的前面,然後再把原來陣列的前面的元素複製到新陣列的後面,最後再把新陣列的全部元素複製到原來的陣列中,即可。
該方法很容易被想到,但是需要額外的輔助空間。
解法二:三步操作法。
第一步:將原來陣列全部反序。
第二步:再將前m個元素反序。
第三步:最後將後面的元素反序。
解法二不需要額外的輔助空間,是更好的解法。
由於解法一很簡單,我就不再些具體的**了,針對解法二,寫出了如下j**a**:
1public
class
main13 11}
1213
public
static
void adjust(int a,int m)
18if(m<0 ||m>a.length)
22 reverse(a,0,a.length-1); //
第一步:全部反序
23 reverse(a,0,m-1); //
第二步:再反序前m個數
24 reverse(a,m,a.length-1); //
第三步:最後反序後面的a.length-m個數25}
2627
public
static
void
main(string args) ;
30int m=3;
31 system.out.print("原陣列為:");
32for(int i=0;i)
33 system.out.print(a[i]+",");
34system.out.println();
35adjust(a,m);
36 system.out.print("右移動"+m+"個後為:");
37for(int i=0;i)
38 system.out.print(a[i]+",");39}
4041 }
輸出結果為:
原陣列為:1,2,3,4,5,6,7,8,9,
右移動3個後為:7,8,9,1,2,3,4,5,6,
陣列迴圈右移問題
首先,假設我們有乙個具有6個元素的陣列 1,2,3,4,5,6 現在我們要對這個陣列迴圈右移4次,我們很直接很夠推出它的結果是 3,4,5,6,1,2 但是我們如何去實現這樣乙個問題呢?step1 儲存好陣列中最後乙個元素的值 step2 從第乙個元素到倒數第二個元素依次向右移動乙個位置 step3...
陣列元素迴圈右移問題
乙個陣列a中存有n 0 個整數,在不允許使用另外陣列的前提下,將每個整數迴圈向右移m 0 個位置,即將a中的資料由 a0a1 an 1 變換為 an man m 1 a0a1 an m 2an m 1 最後m個數迴圈移至最前面的m個位置 如果需要考慮程式移動資料的次數盡量少,要如何設計移動的方法?輸...
陣列元素迴圈右移問題
written by bruth lee in southwest universiy of science and technology.乙個陣列 a中存有 n 個整數,在不允許使用另外陣列的前提下,將每個整數迴圈向右移 m 個位置,即將 a中的資料由 a 0 a 1 a n 1 變換為 a n ...