以下是一个编程任务。
给定一个由N个整数组成的序列。任务是找到连续的整数序列的数量,使它们的和为零。
例如,如果序列是:2,-2,6,-6,8 有3个这样的序列:
- '2,-2' - '6,-6' - '2,-2,6,-6'
我已经编写了以下PHP程序,从STDIN读取输入(第一行包含接下来的整数数量)。
给定一个由N个整数组成的序列。任务是找到连续的整数序列的数量,使它们的和为零。
例如,如果序列是:2,-2,6,-6,8 有3个这样的序列:
- '2,-2' - '6,-6' - '2,-2,6,-6'
我已经编写了以下PHP程序,从STDIN读取输入(第一行包含接下来的整数数量)。
<?php
$n = fgets(STDIN) * 1;
$seq = array();
for ($i = 0; $i < $n; $i++) {
$seq[] = fgets( STDIN ) * 1;
}
$count = 0;
for( $i = 0; $i < $n; $i++)
{
$number = 0;
for( $j = $i; $j < $n; $j++)
{
$number += $seq[$j];
if( $number == 0 )
$count++;
}
}
echo 'count: ' . $count . PHP_EOL;
输入示例
5
2
-2
6
-6
8
这对于较小的序列效果很好,但其效率为O(n^2)。
针对包含100,000个整数的序列,适当的算法是什么 - 可能是O(n)的效率?