2014-02-04 3 views
-4

Пример:найти длину самого длинного непрерывного ряда положительных чисел в массиве

2,3,0,1,-5,10,11,12 

Наибольшая длина положительных чисел 3.

У меня есть код, чтобы проверить массив, но не понять, как именно я могу сделать int для хранения длины и перезапуска, если, например, последовательность останавливается.

+2

вы читали что-нибудь о программировании? Если да, прочитайте больше .. –

+2

Я предполагаю, что это вопрос домашней работы, поскольку я не вижу практического применения этого. Если это так, вы должны уделять больше внимания классу или перефразировать свой вопрос с использованием примеров кода. Определение 'int' (которое вы говорите, что вы не знаете, как это сделать), вероятно, было урок 1. –

ответ

3
int counter = 0; 
    int longestCounter = 0; 
    for (int i = 0; i < array.Length; i++) 
    { 
     if (array[i] > 0) counter++; 
     else 
     { 
      if (counter > longestCounter) longestCounter = counter; 
      counter = 0; 
     } 
    } 
    if (counter > longestCounter) longestCounter = counter; 
+0

Вы правы, я исправил это –

0
// similar to the "Sliding Windows Algorithm" in "Programming Pearls" 
int i, current, maxSoFar; 

current = 0; 
maxSoFar = 0; 
for (i = 0; i < a.Length; i++) 
{ 
    if (a[i] > 0) 
    { 
     current = current + 1; 

     if (current > maxSoFar) 
     { 
      maxSoFar = current; 
     } 
    } else { 
     current = 0; 
    } 
} 
+1

Что такое' a'. По крайней мере, опубликуйте компилируемый, читаемый код, если вы хотите ответить на домашнюю работу. –

1

Просто добавить этот ответ в качестве альтернативы. Вы можете просто использовать for -loop как это (очень похожий на другие ответы, только более компактный):

int longestLen = 0, currentLen = 0; 
for(int i = 0; i < array.Length; i++) { 
    currentLen = array[i] > 0 ? currentLen + 1 : 0; 
    longestLen = Math.Max(currentLen, longestLen); 
} 
Console.WriteLine(longestLen); // 3 

Или Linq, как это:

int longestLen = array.Aggregate(
    new { c = 0, m = 0 }, 
    (x, n) => new { c = n = (n > 0 ? x.c + 1 : 0), m = Math.Max(n, x.m) }, 
    x => x.m); 
Console.WriteLine(longestLen); // 3 
Смежные вопросы