【发布时间】:2017-08-30 04:35:57
【问题描述】:
对于给定的列表,比如说[ "a", "a", "b", "c", "c" ],我需要[ "b" ](只有非重复元素)作为输出。请注意,这与使用 Set 接口进行作业不同...
我用 Java 编写了以下代码:
void unique(List<String> list) {
Collections.sort(list);
List<String> dup = new ArrayList<>();
int i = 0, j = 0;
for (String e : list) {
i = list.indexOf(e);
j = list.lastIndexOf(e);
if (i != j && !dup.contains(e)) {
dup.add(e);
}
}
list.removeAll(dup);
}
它有效...但是对于大小为 85320 的列表,几分钟后结束!
【问题讨论】:
-
我可能是一个很好的算法问题。列表的值是否受到某种限制(例如只有 ascii 字符)?
-
如果一个元素出现超过 1 次,则必须从列表中删除所有出现的元素。
-
@ThorbjørnRavnAndersen 我不相信 OP 说不允许设置 - 只是所需的输出不仅仅是你从
new HashSet<>(list)得到的。 -
@AndyTurner 明白了这一点。没错!
-
@AndyTurner 然后问题标题措辞不当。
标签: java arraylist collections set