三数之和,排序、双指针

Posted on 2022-04-15 10:05  你错过了  阅读(34)  评论(0编辑  收藏  举报



class
Solution { public List<List<Integer>> threeSum(int[] arr) { int n = arr.length; Arrays.sort(arr);//排序过后,双指针算法才能起到效果 HashSet<List<Integer>> set = new HashSet<>();//利用set去重,set里面放list集合 for (int i = 0; i < arr.length; i++) { int l = i + 1; int r = n - 1; while (l < r) {//右边大于左边结束 if (arr[i] + arr[l] + arr[r] == 0) {//满足条件 set.add(Arrays.asList(arr[i], arr[l], arr[r]));//格式化插入 l++; r--; } else if (arr[i] + arr[l] + arr[r] > 0) {//第一个值固定的,移动的是二、三值 r--; } else { l++; } } } List<List<Integer>> x = new ArrayList<>(); x.addAll(set); return x;//按照题目返回 } }


讲解题目b站地址:力扣题目15-三数之和_哔哩哔哩_bilibili