扫描器到2D char数组的时间太长。
嗨!由于一些未知的原因,我的代码需要很长时间,我唯一的猜测是扫描仪是缓慢的,但我不能逃避它,因为我需要使用它。seaCard的大小可以是从1 * 1到10000 * 10000的任何值。cpu的时间限制是8秒,这应该是足够的时间来执行这一点。整个作业是计算网格中的岛屿,但我甚至不能及时读取数据。
输入是这样的Map
~~~~~
~@@~~
@~~~~.
我的代码是这样的。
public static void main(String[] args) {
Scanner input = new Scanner(System.in);
int rows = input.nextInt();
int cols = input.nextInt();
input.nextLine();
char[][] seaCard = new char[rows][cols];
// making the map
for(int i = 0; i < rows; i++){
String thisRow = input.nextLine();
for(int j = 0; j < cols; j++){
seaCard[i][j] = thisRow.charAt(j);
}
}
input.close();
我尝试过将2D数组改为1D字符串数组,但变化不大,我还尝试过使用next()代替nextLine()。
我希望代码运行平稳,并且对于rows = 10000和cols = 10000,字符串输入为10000个长度为10000的字符串行,所需时间不超过6秒。
然而,它只是dosent完成,我唯一的想法是,因为我使用2的循环,我得到了n^2的时间复杂度,但我觉得这仍然不应该使它需要这么长的时间。
1条答案
按热度按时间wlp8pajw1#
此版本从文件中获取输入。第一行应该是行数。不需要从控制台输入任何内容。