来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/3sum
题目
给定一个包含 n 个整数的数组 nums,判断 nums 中是否存在三个元素 a,b,c ,使得 a + b + c = 0 ?找出所有满足条件且不重复的三元组。
注意:答案中不可以包含重复的三元组。
例如,
给定数组 nums = [-1, 0, 1, 2, -1, -4],
满足要求的三元组集合为:
[
[-1, 0, 1],
[-1, -1, 2]
]
找出数组里面是否有三数之和等于0的三元组。如果有,找出所有不重复的三元组。
方法1-先排序。第一个数是for循环来找,后两个数在while循环里面由头+尾组成
func threeSum(_ nums: [Int]) -> [[Int]] {
if nums.count < 3 {
return []
}
var resultArr = [[Int]]()
//先排序
let nums = nums.sorted()
for i in 0..<nums.count - 2 {
let num1 = nums[i];
//如果第一个数就大于0,则结束循环
if num1 > 0 {
break
}
if i > 0 && num1 == nums[i-1]{
continue
}
//然后找两数之和=0-num1的两个数
let sum = 0-num1
var num2_index = i+1
var num3_index = nums.count - 1
while num2_index < num3_index {
let num2 = nums[num2_index]
let num3 = nums[num3_index]
//跳出循环
if num2 > sum {
break
}
//如果和上次的相等,跳出循环
if num2_index > i+1 && num2 == nums[num2_index - 1] {
num2_index += 1
continue
}
if num3_index != nums.count - 1 && num3 == nums[num3_index + 1] {
num3_index -= 1
continue
}
//和为sum,则添加到resultArr里面
if num2 + num3 == sum {
resultArr.append([num1, num2, num3])
num2_index += 1
num3_index -= 1
}else if num2 + num3 < sum{
num2_index += 1
}else {
num3_index -= 1
}
}
}
return resultArr
}
最后
不知道大家还有没有更好的方法,欢迎交流~
网友评论