【发布时间】:2021-05-06 12:01:48
【问题描述】:
我想存储唯一列表,所以我使用 HashSet。但是,我没有得到想要的输出。这是我的代码,你能告诉我出了什么问题吗?
public List<List<Integer>> threeSum(int[] nums) {
Set<List<Integer>> res = new HashSet<>();
for(int i = 0; i< nums.length; i++){
int target = 0-nums[i];
Set<Integer> neg = new HashSet<>();
for(int j = i+1 ; j<nums.length; j++){
int rem = target - nums[j];
if(neg.contains(nums[j])){
res.add(new ArrayList<>(Arrays.asList(nums[i], rem, nums[j])));
}
else{
neg.add(rem);
}
}
}
System.out.println(res);
return new ArrayList<>(res);
}
我的数字是[-1,0,1,2,-1,-4]。
我的输出是[[-1,2,-1],[0,1,-1],[-1,0,1]]。为什么我将[0,1,-1] 和[-1,0,1] 都放入 res 中,因为它们都包含相同的元素。我什么只有其中之一?我该怎么办?
【问题讨论】:
-
“为什么我都得到了”,因为它们是不同的。列表只有在它们包含相同顺序的相同元素时才相等。如果您想忽略顺序,请将它们排序。
-
谢谢@AndyTurner,有什么方法可以让我只检查没有顺序的元素吗?还有其他我错过的 DS 吗?
-
还有其他数据结构;但是你真的需要比排序列表更复杂的东西吗?
-
对固定长度的列表进行排序是一个固定时间的操作。它必须是,没有变量。
-
对一个3元素列表进行排序需要3次以上的操作。