2017-05-18 73 views
-3

我制定了以下邏輯。最短運行:具有相同元素的原始數組的子數組。如何查找數組中最短運行的最後一個索引?

// "A" is Array, p is length of a current run, q is global variable that stores lowest run length 
procedure(){ 
    while(i < sizeOfArray){ 
    if(A[i]==A[i+1]){ 
    //1.Increment a variable "p" to capture the length of run 
     //2. compare p and q and which ever is smaller , is saved into q 
     }else{ 
    //3. What to do here ? 
    } 
    } 
return q; 
} 
+0

仍然無效的C代碼。你的問題表明你的邏輯「總是返回錯誤。」這是什麼意思,如果你還沒有寫任何代碼呢?相關的邏輯不是以你所表現出來的方式表達的。你將需要努力讓任何人來幫助解決這個問題。 –

+0

@DavidBowling我重申了這個問題。提問的動機是瞭解邏輯而不是編程代碼。您可以使用任何語言來顯示答案。謝謝 – djay

回答

0

我假設基於您的代碼的「最短運行」意味着數組中所有數字都相同的最短序列。下面的算法將找到最短行的最後一個索引。請注意,它會找到第一個最短的運行,因爲有多個相同大小的運行。

int A[10] = {1,1,1,1,2,2,2,3,3,3}; 
int q = INT_MAX, i = 0, p = 1, lastIndex = 0; 
while(i != 9){ //10 is the size of the array 
     if(A[i]==A[i+1]){ 
       ++p; 
     }else{ 
       if(p < q) { 
         q = p; 
         lastIndex = i; 
       } 
       p = 1; //reset p, the size of the run should be 1 
     } 
     i++; 
} 
return lastIndex; 

注意,找到最短的來看,你比較p和q後運行結束後,讓你在else語句比較。上面的示例返回6,其中A [6]是2,最小的運行的最後一個索引,其大小爲3.

+0

不是很好的做法,可以回答那些毫不費力的問題,而只是尋求解決方案。 –

+1

我認爲一般的想法是正確的,但有一些錯誤。例如。數組索引越界,我會從i = 1開始,並與i-1比較,以避免陷阱。或者如果最後一次跑步是最小的話,你會錯過它。沒有降低我的意願。 – maraca

+0

當最後一次運行時間最短時,邏輯會失敗,因爲循環終止時'p'不與'q'進行比較。例如,'A [10] = {1,1,1,1,2,2,2,2,3,3}'失敗,報告3。 –

相關問題