【数据结构和算法】固定一个,求两个数字之和
数组中相加和为0的三元组
http://www.nowcoder.com/practice/345e2ed5f81d4017bbb8cc6055b0b711
先对数组排序,然后固定一个数字,再求两个数字之和。
public ArrayList<arraylist<integer>> threeSum(int[] num) { //先排序 Arrays.sort(num); ArrayList<arraylist<integer>> res = new ArrayList<>(); int length = num.length; for (int i = 0; i < length - 2; i++) { //过滤掉重复的 if (i != 0 && num[i] == num[i - 1]) continue; int left = i + 1; int right = length - 1; int target = -num[i]; //改为求两数之和 while (left < right) { int midVale = num[left] + num[right]; if (midVale == target) { res.add(new ArrayList<>(Arrays.asList(num[i], num[left], num[right]))); while (left < right && num[left] == num[left + 1])//过滤掉重复的 left++; while (left < right && num[right] == num[right - 1])//过滤掉重复的 right--; left++; right--; } else if (midVale < target) left++; else right--; } } return res; }
截止到目前我在公众号“数据结构和算法”中已经写了500多道算法题,其中部分已经整理成了pdf文档,目前总共有1000多页(并且还会不断的增加),大家可以免费下载
下载链接:https://pan.baidu.com/s/1hjwK0ZeRxYGB8lIkbKuQgQ
提取码:6666
如果觉得有用就给个赞吧,还可以关注我的《牛客博客》查看更多的详细题解
数据结构和算法 文章被收录于专栏
专注于算法题的讲解,包含常见数据结构,排序,查找,动态规划,回溯算法,贪心算法,双指针,BFS和DFS等等