美文网首页算法每日一刷
LeetCode算法题-15. 三数之和(Swift)

LeetCode算法题-15. 三数之和(Swift)

作者: entre_los_dos | 来源:发表于2019-06-25 19:22 被阅读0次

    来源:力扣(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
            
        }
    

    最后

    不知道大家还有没有更好的方法,欢迎交流~

    相关文章

      网友评论

        本文标题:LeetCode算法题-15. 三数之和(Swift)

        本文链接:https://www.haomeiwen.com/subject/fuytcctx.html