Oscar » 19 дек 2005, 23:56
Код: Выделить всё
<pre>
<?php
$input = array();
$max = 30;
for($i = 0; $i < $max; $i++) {
$input[$i] = rand(0, $max);
}
$input = array_unique($input);
/*
$input[0] = 5;
$input[1] = 1;
$input[2] = 4;
$input[3] = 6;
$input[4] = 2;
$input[5] = 10;
*/
$longestSequence = 0;
if (count($input) > 0) {
$temp = $input;
sort($temp);
print_r($temp);
$first = $temp[0];
$last = $temp[0];
$tempSequence = 1;
$longestSequence = 1;
for($i = 1; $i < count($temp); $i++) {
if ($first-$temp[$i] == 1) {
$tempSequence++;
$first = $temp[$i];
} else if ($temp[$i] - $last == 1) {
$tempSequence++;
$last = $temp[$i];
} else {
if ($tempSequence > $longestSequence)
$longestSequence = $tempSequence;
$tempSequence = 1;
$first = $temp[$i];
$last = $temp[$i];
}
}
}
if ($tempSequence > $longestSequence)
$longestSequence = $tempSequence;
echo "
Longest sequence: $longestSequence\n";
?>
</pre>
Это PHP.
Нужно добавить, что у текущей последовательности есть first и last элементы (проверяемый элемент должен быть на единицу меньше first элемента, или на единицу больше last элемента, только тогда нужно инкрементировать счётчик),
И счётчик нужно иметь отдельно от конечного результата ($tempSequence - счётчик, $longestSequence - конечный результат; когда обнуляется счётчик (устанавливается в единицу), конечный результат равен максимуму между текущим значением и счётчиком; то же самое нужно проделать после цикла, для последней проверяемой последовательности).
Кроме того, первый и последний элементы нужно всегда подправлять.
[code]<pre>
<?php
$input = array();
$max = 30;
for($i = 0; $i < $max; $i++) {
$input[$i] = rand(0, $max);
}
$input = array_unique($input);
/*
$input[0] = 5;
$input[1] = 1;
$input[2] = 4;
$input[3] = 6;
$input[4] = 2;
$input[5] = 10;
*/
$longestSequence = 0;
if (count($input) > 0) {
$temp = $input;
sort($temp);
print_r($temp);
$first = $temp[0];
$last = $temp[0];
$tempSequence = 1;
$longestSequence = 1;
for($i = 1; $i < count($temp); $i++) {
if ($first-$temp[$i] == 1) {
$tempSequence++;
$first = $temp[$i];
} else if ($temp[$i] - $last == 1) {
$tempSequence++;
$last = $temp[$i];
} else {
if ($tempSequence > $longestSequence)
$longestSequence = $tempSequence;
$tempSequence = 1;
$first = $temp[$i];
$last = $temp[$i];
}
}
}
if ($tempSequence > $longestSequence)
$longestSequence = $tempSequence;
echo "
Longest sequence: $longestSequence\n";
?>
</pre>[/code]
Это PHP.
Нужно добавить, что у текущей последовательности есть first и last элементы (проверяемый элемент должен быть на единицу меньше first элемента, или на единицу больше last элемента, только тогда нужно инкрементировать счётчик),
И счётчик нужно иметь отдельно от конечного результата ($tempSequence - счётчик, $longestSequence - конечный результат; когда обнуляется счётчик (устанавливается в единицу), конечный результат равен максимуму между текущим значением и счётчиком; то же самое нужно проделать после цикла, для последней проверяемой последовательности).
Кроме того, первый и последний элементы нужно всегда подправлять.