2016-05-06 84 views
0

我寫了這個方法來尋找數組中最長的增加子序列。我的問題是,在檢查第二個for循環中下一個索引是否更高之後,爲什麼我必須在之後使用else塊?如果我沒有輸出正確的結果。如果序列中的下一個較大,爲什麼不足以將currentSeq增加1?如果是false,而不是繼續進行控制流程,那麼currentSeq仍留在1尋找最長增加子序列的問題

static void Main(string[] args) 
{ 
    int length = int.Parse(Console.ReadLine()); 
    int[] nums = new int[length]; 

    int currentSeq = 1; 
    int maxSeq = 1; 

    for (int i = 0; i < nums.Length; i++) 
    { 
     nums[i] = int.Parse(Console.ReadLine()); 
    } 

    for (int i = 0; i < nums.Length - 1; i++) 
    { 
     if (nums[i] < nums[i + 1]) 
     { 
      currentSeq++; 
     } 
     else 
     { 
      currentSeq = 1; 
     } 

     if (currentSeq > maxSeq) 
     { 
      maxSeq = currentSeq; 
     } 
    } 

    Console.WriteLine(maxSeq); 
} 
+0

請考慮像「12123」這樣的序列。在前兩個數字後,你必須開始一個新的序列,但'currentSeq'是'2',而不是'1'。如果不將它重置爲「1」,下面的序列長度將是「4」而不是「3」。 –

回答

0

您需要else關鍵字才能將currentSeq重置爲1,以便進行下一次序列計算。假設您已完成第一個序列,並開始計算表中的下一個序列,則需要從1開始重新計算。