【发布时间】:2020-04-20 13:49:28
【问题描述】:
这是一个 leetcode 问题。 在eclipse中运行我的代码时一切都很好,但是当我将它提交给leetcode时发生错误“超出内存限制”。如何处理它。
给定由成对的出发和到达机场 [from, to] 表示的机票列表,按顺序重构行程。所有的票都属于一个从肯尼迪机场出发的人。因此,行程必须从肯尼迪机场开始。
注意:
如果有多个有效行程,您应该在读取为单个字符串时返回具有最小词汇顺序的行程。例如,行程 ["JFK", "LGA"] 的词汇顺序比 ["JFK", "LGB"] 小。 所有机场均由三个大写字母(IATA 代码)表示。 您可以假设所有机票至少包含一个有效行程。
这是我的解决方案:
class Solution {
class Checker implements Comparator<String>{
@Override
public int compare(String o1, String o2) {
return o1.compareToIgnoreCase(o2);
}
}
public List<String> findItinerary(List<List<String>> tickets){
String begin="JFK";
final String example=begin;
List<String> solution = new ArrayList<>();
long counter=tickets.stream().filter(lister->lister.get(0).equals(example)).count();
List<String> lexic=tickets.stream().filter(lister->lister.get(0).equals("JFK")).map(p->p.get(1)).distinct().collect(Collectors.toList());
Comparator<String> comparator =new Checker();
lexic.sort(comparator);
solution.add(begin);
begin=lexic.get(0);
System.out.println(counter);
for(int i=0;i<tickets.size();i++) {
if(tickets.get(i).get(0).equals(begin)) {
if(!solution.contains(begin)) {
solution.add(begin);
}
begin=tickets.get(i).get(1);
solution.add(begin);
i=-1;
}
}
return solution;
}
}
【问题讨论】:
-
lexic列表看起来没有必要:只需使用min而不是收集到列表、排序和获取第一个元素。 -
@Andy Turner 我用它来根据词汇顺序得到最方便的路线
-
你不会在
begin=lexic.get(0);行之后使用lexic,对吗? -
@Andy Turner 不,我不使用它,但我需要词汇才能使用比较器对结果进行排序
标签: java algorithm arraylist data-structures