摘要:要求序列不重复。这个问题比较复杂的一点是,还要处理重复的数据。为了简化我们的操作,我们先对数组进行预排序。排序之后,对于求两个数和的问题,可以通过和两个指针从两边查找,也简化了操作时间。解法防止重复序列
题目详情
Given an array S of n integers, are there elements a, b, c in S such that a + b + c = 0? Find all unique triplets in the array which gives the sum of zero.想法给定一个整数数组s,我们要找出s中是否有三个不同元素的加和等于0,如果有,输出所有满足条件的序列。要求序列不重复。
For example, 输入数组S = [-1, 0, 1, 2, -1, -4],
返回的结果集应该是:
[
[-1, 0, 1],
[-1, -1, 2]
]
通过减治的思想,我们可把三个数求和的问题,减治为对于数组中不重复的元素nums[i],求两个数的和等于-nums[i]的过程。
这个问题比较复杂的一点是,还要处理重复的数据。为了简化我们的操作,我们先对数组进行预排序。
经历了预排序,我们判断一个元素是否重复,只需要比较它和之前位置的元素是否相等就可以了。
排序之后,对于求两个数和的问题,可以通过low和high两个指针从两边查找,也简化了操作时间。
解法public List> threeSum(int[] nums) { int length = nums.length; List
> res = new ArrayList
>(); Arrays.sort(nums); for(int i=0;i
0 && nums[i] != nums[i-1])){ int low = i+1; int high = length-1; int target = -nums[i]; while(low < high){ if(nums[low]+nums[high] == target){ res.add(Arrays.asList(nums[i], nums[low], nums[high])); while(low < high && nums[low] == nums[low+1])low++; while(low < high && nums[high] == nums[high-1])high--; low++; high--; }else if(nums[low]+nums[high] < target){ low++; }else{ high--; } } } } return res; }
文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。
转载请注明本文地址:https://www.ucloud.cn/yun/70984.html
摘要:题目要求输入一个整数数组,从中找到所有的三个整数组成一个数组,这三个整数的和为。要求不包括重复的结果思路一无这里使用了三个指针。先对数组进行排序。 题目要求 Given an array S of n integers, are there elements a, b, c in S such that a + b + c = 0? Find all unique triplets i...
摘要:返回这三个值的和。思路一三指针这里的思路和是一样的,就是用三个指针获得三个值并计算他们的和。 题外话 鉴于这一题的核心思路和leetcode15的思路相同,可以先写一下15题并参考一下我之前的一篇博客 题目要求 Given an array S of n integers, find three integers in S such that the sum is closest to...
摘要:解题思路题目要求两个数和等于,返回其题目说明不会有重复情况,所以我们一旦发现符合情况的,就可以直接结束循环并返回。特殊情况就是正好等于,那肯定是最接近的情况,直接返回即可。 Two SumGiven an array of integers, return indices of the two numbers such that they add up to a specific ta...
摘要:题目详情给定一个整数数组,我们需要找出数组中三个元素的加和,使这个加和最接近于输入的数值。返回这个最接近的加和。找后两个元素的时候,使用左右指针从两端查找。 题目详情 Given an array S of n integers, find three integers in S such that the sum is closest to a given number, targe...
摘要:为了避免得到重复结果,我们不仅要跳过重复元素,而且要保证找的范围要是在我们最先选定的那个数之后的。而计算则同样是先选一个数,然后再剩下的数中计算。 2Sum 在分析多数和之前,请先看Two Sum的详解 3Sum 请参阅:https://yanjia.me/zh/2019/01/... 双指针法 复杂度 时间 O(N^2) 空间 O(1) 思路 3Sum其实可以转化成一个2Sum的题,...
阅读 2488·2021-11-15 18:14
阅读 1712·2021-10-14 09:42
阅读 3748·2021-10-11 10:58
阅读 3941·2021-10-09 09:44
阅读 2412·2021-09-26 09:55
阅读 2431·2021-09-24 10:38
阅读 2026·2021-09-04 16:48
阅读 3268·2021-09-02 15:21