【发布时间】:2020-02-07 23:09:17
【问题描述】:
情况
我的任务是在现场编码面试中实施一个字符串字谜问题。问题给出了两个字符串,为方法boolean isAnagram(String str1, String str2)编写逻辑。
解决方案
我提出了以下解决方案(mergeSort 是我自己的实现,containsChar 使用的是二进制搜索,这也是我自己的实现)
public static boolean isAnagram(String value, String valueToCompare) {
String temp = valueToCompare.replaceAll("'", "").replaceAll(" ", "").toLowerCase();
String t = value.replaceAll("'", "").replaceAll(" ", "").toLowerCase();
if (t.length() == temp.length()) {
char[] c = t.toCharArray();
char[] orderedChars = MergeSort.mergeSort(temp.toCharArray());
for (int i = 0; i < orderedChars.length ; i++) {
if (!containsChar(orderedChars, c[i], 0, orderedChars.length - 1))
return false;
}
return true;
}
return false;
}
解决方案的效率是多余的,我更关心后台发生的事情。
问题
我提出解决方案后,面试官问我, 假设我有一台内存非常低的计算机,我想运行它 算法 10.000 次,随机字符串大小在 1000 到 10000 之间,你的代码会发生什么?我不知道该回答什么,所以他告诉我我会得到一个 OutOfMemoryError 异常。我知道(或者我至少认为)由于算法的效率,我会得到这样的例外。 所以我的问题是:
- 为什么会抛出 OutOfMemoryError 异常?
- 如果我调用该方法 1000 次,是否因为完成一次调用需要很长时间才能引发此类异常?
- 当我调用该方法 x 次时,后台发生了什么?
【问题讨论】:
-
评论不用于扩展讨论;这个对话是moved to chat。
标签: java algorithm memory-management out-of-memory java-memory-model