2016-01-26 64 views
-1

我想從索引i開始顛倒給定數組的一部分直到j(包括兩端)。例如,如果它包含:顛倒從索引i到j(包括)的數組的一段。

1 2 3 4 5 6 7 

後相反的過程應該是這樣的:

1 6 5 4 3 2 7 
在這種情況下I = 1,J = 5

。 我的方法是:

public static void sw(int[] l, int i,int j) 
    { 
    for(int z=i; z<((j-i)+1)/2;z++) 
    { 
     int y=((j-i)+1) - z - 1; 
     int temp = l[z]; 
     l[z] = l[y]; 
     l[y] = temp; 
    } 
    } 

它在某些情況下工作不正常。

Case#1: 

6 78 63 59 28 24 8 96 99 
output is: 
6 78 59 63 28 24 8 96 99 
+1

請爲「某些情況」和它輸出的內容定義輸入。 – Spencer4134

+0

什麼情況下特別是它不工作?它以什麼方式不起作用?你的產出如何與你的預期產出有所不同? – tnw

+0

@tnw我編輯它 – Geek

回答

0

您可以完全刪除'z'和'y'。他們太複雜,沒有必要完成任務。你只是想增加'我'和減少'j',直到i <= j 不再是真實的。

因此,我們有:

public static void sw(int[] l, int i,int j) 
    { 
    for(; i<=j;i++, j--) 
    { 
     int temp = l[i]; 
     l[i] = l[j]; 
     l[j] = temp; 
    } 
    } 

for循環有一個空的第一個語句,如「我」已經聲明。

希望這有助於!

相關問題