为什么内存超限了,求高手解答(附代码)

时间:2020-12-26 17:22:17
PAT上的一道题目,链接: https://www.patest.cn/contests/pat-b-practise/1084
代码如下,最后一个测试点过不去,说是内存超限


import java.util.Scanner;
public class Main{
public static void main(String[] args)
{
Scanner in = new Scanner(System.in);
int d;
int n;
d = in.nextInt();
n = in.nextInt();
String s = "" + d;
n = n - 1;
while(n>0){
s = change(s);
n--;
}
System.out.println(s);
in.close();
}
public static String change(String s){
String temp = "";
char ch;
int count;
int i=0;
while(i<s.length()){
ch = s.charAt(i++);
count = 1;
while(i<s.length()&&ch==s.charAt(i)){
count++;
i++;
}
temp += "" + ch + count;
}
return temp;
}
}求解答,万分感谢!

7 个解决方案

#1


虚拟内存太小了呗

#2


代码没有显示出错啊

#3


引用 2 楼 qq_28960763 的回复:
代码没有显示出错啊

题目内存有限制,最后一个测试点,过不去

#4


引用 1 楼 lye2000000_super 的回复:
虚拟内存太小了呗

怎么优化,求指导

#5


题目没看明白,从代码层面提几点建议吧
1. 键盘输入BufferedReader比Scanner性能更好;
2. IO操作比计算操作性能开销大很多,建议先一次性读取完所有输入,关闭输入流后再进行计算操作;
3. 字符串拼接性能:String < StringBuffer < StringBuilder,在不用考虑线程安全的情况下使用StringBuilder性能最佳。

#6


自动判题系统难就难在限制时间,限制内存,限制代码长度,由于3个限制,简单的操作都变得困难
简单来说,交换2个数时,不允许借助第三个变量(限制内存),
这道题,不要用字符串拼接,用char数组,算好最长的大小,一个正整数 N(<=40)

#7


import java.util.*;

public class PAT {
public static void main(String args[]) {
Scanner sc = new Scanner(System.in);
String str = sc.next();
int n = sc.nextInt();


for(int i = 0; i < n-1; i++) {
str = method(str);
}
System.out.println(str);
}

public static String method(String input) {
StringBuilder str = new StringBuilder();

int i = 0, number = 1;
char b, a = input.charAt(i);
i++;

while(i < input.length()) {
b = input.charAt(i);
if(b == a) {
number++; i++;
}else {
str.append(a);
str.append(number);

a = input.charAt(i);
number = 1;
i++;
}
}
str.append(a); str.append(number);
return str.toString();
}
}


我去题目链接看了一下, 好像不太卡内存, 上述代码是我提交了的。 楼主可以参考一下! 
另外,照我的经验, 楼主可能卡在了一个特殊的测试用例上了。 算法的问题
为什么内存超限了,求高手解答(附代码)

#1


虚拟内存太小了呗

#2


代码没有显示出错啊

#3


引用 2 楼 qq_28960763 的回复:
代码没有显示出错啊

题目内存有限制,最后一个测试点,过不去

#4


引用 1 楼 lye2000000_super 的回复:
虚拟内存太小了呗

怎么优化,求指导

#5


题目没看明白,从代码层面提几点建议吧
1. 键盘输入BufferedReader比Scanner性能更好;
2. IO操作比计算操作性能开销大很多,建议先一次性读取完所有输入,关闭输入流后再进行计算操作;
3. 字符串拼接性能:String < StringBuffer < StringBuilder,在不用考虑线程安全的情况下使用StringBuilder性能最佳。

#6


自动判题系统难就难在限制时间,限制内存,限制代码长度,由于3个限制,简单的操作都变得困难
简单来说,交换2个数时,不允许借助第三个变量(限制内存),
这道题,不要用字符串拼接,用char数组,算好最长的大小,一个正整数 N(<=40)

#7


import java.util.*;

public class PAT {
public static void main(String args[]) {
Scanner sc = new Scanner(System.in);
String str = sc.next();
int n = sc.nextInt();


for(int i = 0; i < n-1; i++) {
str = method(str);
}
System.out.println(str);
}

public static String method(String input) {
StringBuilder str = new StringBuilder();

int i = 0, number = 1;
char b, a = input.charAt(i);
i++;

while(i < input.length()) {
b = input.charAt(i);
if(b == a) {
number++; i++;
}else {
str.append(a);
str.append(number);

a = input.charAt(i);
number = 1;
i++;
}
}
str.append(a); str.append(number);
return str.toString();
}
}


我去题目链接看了一下, 好像不太卡内存, 上述代码是我提交了的。 楼主可以参考一下! 
另外,照我的经验, 楼主可能卡在了一个特殊的测试用例上了。 算法的问题
为什么内存超限了,求高手解答(附代码)