每天AC系列(一):三数之和
1 题目 LeetCode第15题 ,难度中等,题目描述: 给定一个包含 n 个整数的数组 nums,判断 nums 中是否存在三个元素 a,b,c ,使得 a + b + c = 0 ?找出所有满足条件且不重复的三元组。 注意:答案中不可以包含重复的三元组。 2 解法 什么也不管先来个O(n3): for(int i=0;i<nums.length;++i) { for(int j=i+1;j<nums.length;++j) { for(int k=j+1;k<nums.length;++k) { if(nums[i]+nums[j]+nums[k] == 0) { ArrayList<Integer> arrayList = new ArrayList<>(); arrayList.add(nums[i]); arrayList.add(nums[j]); arrayList.add(nums[k]); result.add(arrayList); } } } } well. 3 优化 上面暴力算法的思想就是单纯三个循环,优化的方法可以考虑降低一个循环,使用"双指针"的思想,首先对数组进行排序,然后一开始固定一个数,然后让两个指针一个指向这个数的右区间的起点,一个指向终点,不断计算这三个值的和,根据得出的和移动左指针或者右指针,一共三种情况: 和等于0,同时移动左右指针