陣列的迴圈右移問題(好未來筆試題)

2022-09-08 17:51:09 字數 1374 閱讀 6274

問題描述:給定乙個整數陣列,長度為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**:

1

public

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 ...