2016-05-06 3 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

Для повторного вычисления currentSeq для следующего вычисления последовательности вам понадобится ключевое слово else. Представьте, что вы закончили с первой последовательностью, и вы начнете вычислять следующий в таблице, вам нужно будет перезапустить с 1.

Смежные вопросы