要记住时间和空间复杂性应该是最小的要点。为了实现这一点,我将两个for循环合二为一,然后发生错误java.util.NoSuchElementException
。
错误在以下行:a = in.nextInt();
import java.io.*;
import java.util.*;
public class Solution {
public static void main(String[] args) {
Scanner in = new Scanner(System.in);
int N = in.nextInt();
int M = in.nextInt();
long m[] = new long[N];
long big=0;
int a = in.nextInt();
int b = in.nextInt();
int k = in.nextInt();
int i;
int j;
for( i=0,j=a-1 ; i<M && j<=N ; j++)
{
m[j] = m[j] + k;
big = Math.max(big, m[j]);
if(j==b-1)
{
a = in.nextInt();
b = in.nextInt();
k = in.nextInt();
j = a-1;
i=i+1;
}
}
System.out.print(big);
}
}
之前工作的中间代码如下:
for(int i=0;i<M;i++)
{
int a = in.nextInt();
int b = in.nextInt();
int k = in.nextInt();
for(int j=a-1;j<=b-1;j++)
{
m[j] = m[j] + k;
if(m[j]>big)
{
big = m[j];
}
}
}
答案 0 :(得分:0)
m [a-1]存在的保证是什么,a是动态输入,你没有检查它是否是&gt; = 0和
答案 1 :(得分:0)
在我看来,根本原因在于循环测试:
for( i=0,j=a-1 ; i<M && j<=N ; j++)
实际上,数组声明为:
long m[] = new long[N];
所以测试应该是:
for( i=0,j=a-1 ; i<M && j<N ; j++)