public List<List<Integer>> threeSum(int[] nums) { List<List<Integer>> res = new ArrayList<>(); int len = nums.length; if(len<3) return res; Arrays.sort(nums, new Comparator<Integer>() { public int compare(Integer o1, Integer o2) { return o1-o2; } });为什么这里的实现Comparator部分会出错
时间: 2024-01-27 07:05:33 浏览: 104
这段代码的问题在于`Arrays.sort`方法的第二个参数的类型不匹配。`Arrays.sort`方法有多个重载版本,其中一个版本的第二个参数是`Comparator`类型,用于指定排序规则。但是这个版本的`sort`方法的第二个参数是`Comparator`类型的数组,用于指定每个元素的排序规则。
因此,如果要使用`Comparator`指定排序规则,可以改为以下代码:
```java
Arrays.sort(nums);
for (int i = 0; i < len - 2; i++) {
if (i > 0 && nums[i] == nums[i - 1]) continue;
int left = i + 1, right = len - 1;
while (left < right) {
int sum = nums[i] + nums[left] + nums[right];
if (sum == 0) {
res.add(Arrays.asList(nums[i], nums[left], nums[right]));
left++;
right--;
while (left < right && nums[left] == nums[left - 1]) left++;
while (left < right && nums[right] == nums[right + 1]) right--;
} else if (sum < 0) {
left++;
} else {
right--;
}
}
}
return res;
```
这里的排序用的是`Arrays.sort(nums)`,没有使用`Comparator`,因为默认的排序规则就是升序排列。
阅读全文