15. 三数之和
https://leetcode-cn.com/problems/3sum/
思路:
方法一:数组排序后,三重暴力循环,排序的目的是一种方便获得不重复解的手段
方法二:数组排序后,利用双指针,因为数组排序后,元素有小到大,便于和0进行比较;
package 数组; import java.util.ArrayList; import java.util.Arrays; import java.util.List; public class 三数之和 { public static void main(String[] args) { // int[] nums = {-1, 0, 1, 2, -1, -4}; int[] nums = {1,2,-2,-1}; // int[] nums = {0,0,0}; 三数之和 三数之和 = new 三数之和(); System.out.println(三数之和.threeSum(nums)); } // 有序数组,双指针法 public List<List<Integer>> threeSum(int[] nums) { List<List<Integer>> result = new ArrayList<>(); if (nums == null || nums.length == 0) { return result; } Arrays.sort(nums); // {-4,-1,-1,0,1,2} // {-2,-1,1,2} for (int i = 0; i < nums.length - 1; i++) { if (i != 0 && nums[i] == nums[i - 1]) continue; int right = nums.length - 1; for (int j = i + 1; j < nums.length - 1; j++) { if (j != i + 1 && nums[j] == nums[j - 1]) continue; while (j<right && nums[i] + nums[j] + nums[right] > 0) { right = right - 1; } if(j == right){ break; } if (nums[i] + nums[j] + nums[right] == 0) { ArrayList<Integer> oneResult = new ArrayList<>(); oneResult.add(nums[i]); oneResult.add(nums[j]); oneResult.add(nums[right]); result.add(oneResult); } } } return result; } // 三数之和为零的,不包含重复结果 // 暴力法 public List<List<Integer>> threeSum1(int[] nums) { List<List<Integer>> result = new ArrayList<>(); if (nums == null || nums.length == 0) { return result; } Arrays.sort(nums); // {-4,-1,-1,0,1,2} for (int i = 0; i < nums.length - 2; i++) { if (i != 0 && nums[i] == nums[i - 1]) continue; for (int j = i + 1; j < nums.length - 1; j++) { if (j != i + 1 && nums[j] == nums[j - 1]) continue; for (int k = j + 1; k < nums.length; k++) { if (k != j + 1 && nums[k] == nums[k - 1]) continue; if (nums[i] + nums[j] + nums[k] == 0) { ArrayList<Integer> oneResult = new ArrayList<>(); oneResult.add(nums[i]); oneResult.add(nums[j]); oneResult.add(nums[k]); result.add(oneResult); } } } } return result; } }
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· AI与.NET技术实操系列(二):开始使用ML.NET
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
· 理解Rust引用及其生命周期标识(上)
· 浏览器原生「磁吸」效果!Anchor Positioning 锚点定位神器解析
· 全程不用写代码,我用AI程序员写了一个飞机大战
· DeepSeek 开源周回顾「GitHub 热点速览」
· 记一次.NET内存居高不下排查解决与启示
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· .NET10 - 预览版1新功能体验(一)