如何解决LinkedList 与 ArrayList
我遇到了从给定的一对括号返回有效括号字符串的问题。例如。如果 n=2,我必须返回一个有效序列的列表,即 ["()()","(())"]。如果问题不是很清楚,不用担心,因为我的疑问比较笼统。
我使用动态编程来寻找解决方案。 list(list) 存储任何对 k 的有效序列列表。列表(lists) 存储来自0 的所有此类列表。我采用了两种方法,改动很小。 解决 1 -
public List<String> generateParenthesis(int n) {
List<List<String>> lists = new ArrayList<>();
lists.add(Collections.singletonList(""));
for (int i=1; i<=n; i++) {
List<String> list = new ArrayList<>();
for (int j=0; j<i; j++) {
for (String first : lists.get(j)) {
for (String second : lists.get(i-1-j))
list.add("(" + first + ")" +second);
}
}
lists.add(list);
}
return lists.get(lists.size()-1);
Soln 2-
public List<String> generateParenthesis(int n) {
List<List<String>> lists = new ArrayList<>();
lists.add(Collections.singletonList(""));
for (int i=1; i<=n; i++) {
List<String> list = new LinkedList<>();
for (int j=0; j<i; j++) {
for (String first : lists.get(j)) {
for (String second : lists.get(i-1-j))
list.add("(" + first + ")" +second);
}
}
lists.add(list);
}
return lists.get(lists.size()-1);
它们之间唯一的区别是 list(list) 在第一种情况下是 ArrayList,在第二种情况下是 LinkedList。根据他们在 oracle 站点上的 API 描述,对于这两种实现,添加操作需要恒定的时间,并且与 LinkedList 实现相比,ArrayList 的常量因子较低。我希望我的第一个解决方案更快,但实际上它是第二个。
PS - 我在 leetcode 上尝试了这个问题,所以他们有一个 1
谁能解释一下原因?
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。