У меня есть эта последовательность 1,2,3,4,5,6,8,10,11
Ожидаемый результат 1-6,8,10-11
Эта проблема связана с форматированием последовательности в легко читаемой форме
Я пробовал с С # и использовал много if & else.
Интервьюер сказал, что для этого есть простой алгоритм.
Я понятия не имею, как добиться этого очень просто.
Также для 1,2,3 я показал 1-3. Они сказали, что это неправильно !.
Есть ли в этой логике какой-либо шаблон проектирования (интерпретатор)?
Вот один из способов сделать это:
int[] numbers = { 1, 2, 3, 4, 5, 6, 8, 10, 11 };
int start, end;
for (int i = 0; i < numbers.Length; i++)
{
start = numbers[i];
while (i < numbers.Length - 1 && numbers[i] + 1 == numbers[i + 1])
i++;
end = numbers[i];
if(start == end)
Console.WriteLine(start);
else
Console.WriteLine(start + " - " + end);
}
Это отобразит последующие числа, которые постепенно увеличиваются как диапазон. Числа, которые не увеличиваются линейно, не записываются как часть диапазона.
Вот еще одна версия первого подхода, он использует тот же for
цикл для итерации по диапазону:
int temp = numbers[0], start, end;
for (int i = 0; i < numbers.Length; i++)
{
start = temp;
if (i < numbers.Length - 1 )
// if subsequent numbers are incremental loop further
if (numbers[i] + 1 == numbers[i + 1])
continue;
// if they are not, number at index i + 1 is a new 'start' for the next iteration
else
temp = numbers[i + 1];
end = numbers[i];
if (start == end)
Console.WriteLine(start);
else
Console.WriteLine(start + " - " + end);
}
Эта статья взята из Интернета, укажите источник при перепечатке.
Если есть какие-либо нарушения, пожалуйста, свяжитесь с[email protected] Удалить.
я говорю два предложения