贵阳市城乡建设厅网站微信公众号文章编辑wordpress
贵阳市城乡建设厅网站,微信公众号文章编辑wordpress,应用商店软件,股票网站建设15. 三数之和 - 力扣#xff08;LeetCode#xff09;
算法思路#xff1a;
去重的两种方法#xff1a; 方法一(暴力解法)#xff1a;
Arrays.asList() 是 Java 中的一个方法#xff0c;它用于将数组或集合转换为一个 固定大小的 列表#xff08;List#xff09;。
…15. 三数之和 - 力扣LeetCode算法思路去重的两种方法方法一(暴力解法)Arrays.asList()是 Java 中的一个方法它用于将数组或集合转换为一个固定大小的列表List。功能Arrays.asList(nums[i], nums[left], nums[right])会将传入的三个元素nums[i],nums[left],nums[right]组合成一个列表并返回该列表。返回的这个列表是固定大小的也就是说你不能在这个列表中添加或删除元素但可以修改元素的值。package _007; import javax.imageio.stream.ImageInputStream; import java.util.*; public class _007_force { public static void main(String[] args) { int[] arr {-1,0,1,2,-1,-4}; Solution s1 new Solution(); List ListInteger list s1.threeSum(arr); System.out.println(list); } } class Solution { public ListListInteger threeSum(int[] nums) { Arrays.sort(nums); List ListInteger list new ArrayList(); SetListInteger set new HashSet(); int i,left,right; for ( i 0; i nums.length; i) { int twoSum nums[i]; for (left i1;leftnums.length; left) { for (right left1; right nums.length; right) { if(nums[i] nums[left] nums[right] 0){ set.add(Arrays.asList(nums[i] , nums[left],nums[right])); } } } } list.addAll(set); return list; } }方法二:()排序首先对数组进行排序这是使用双指针法的前提。固定一个数a遍历数组中的每一个数作为第一个数接着在剩余的部分使用双指针法查找其他两个数的和。双指针法对于每个固定的数a通过设置left和right指针快速找到两个数的和等于-a。去重找到一个结果后left和right指针要跳过重复元素。使用双指针法时i也需要跳过重复元素避免重复三元组。不漏在找到一个三元组后left和right指针继续移动避免停下继续搜索可能的结果。package _007; import java.util.*; import java.util.List; public class _007_first { public static void main(String[] args) { int[] arr {-1,0,1,2,-1,-4}; Solution s1 new Solution(); ListListInteger list s1.threeSum(arr); System.out.println(list); } } class Solotion2 { public ListListInteger threeSum(int[] nums) { ListListInteger result new ArrayList(); int n nums.length; if (nums null || n 3) { return result; } Arrays.sort(nums); for (int i 0; i n; i) { if (nums[i] 0) { break; } if (i 0 nums[i] nums[i - 1]) { continue; } int left i 1; int right n - 1; while (left right) { int sum nums[i] nums[left] nums[right]; if (sum 0) { result.add(Arrays.asList(nums[i], nums[left], nums[right])); while (left right nums[left] nums[left 1]) { left; } while (left right nums[right] nums[right - 1]) { right--; } left; right--; } else if (sum 0) { left; } else { right--; } } } return result; } }