美文网首页LeetCode题库-Swift解题
16. 最接近的三数之和(Swift版)

16. 最接近的三数之和(Swift版)

作者: Mage | 来源:发表于2018-12-26 16:35 被阅读4次

    一、题目

    给定一个包括 n 个整数的数组 nums 和 一个目标值 target。找出 nums 中的三个整数,使得它们的和与 target 最接近。返回这三个数的和。假定每组输入只存在唯一答案。

    例如,给定数组 nums = [-1,2,1,-4], 和 target = 1.

    与 target 最接近的三个数的和为 2. (-1 + 2 + 1 = 2).

    二、解题

    此题思路和15. 三数之和(Swift版)基本一致,同样是利用移动left和right,但题目是sum离target最近,所以需要判断下当abs(sum - target) <= abs(result! - target)时,sum才算离target最近,将sum赋值给result,遍历排序后的数组,即可找到最接近target的sum。
    时间复杂度为O(nlog(n))

    三、代码实现

        class Solution {
            func threeSumClosest(_ nums: [Int], _ target: Int) -> Int {
                var result: Int? = nil
                if nums.count < 3 {
                    return 0
                }
                let arr = nums.sorted()
                
                for i in 0..<arr.count-2 {
                    let first = arr[i]
                    if i > 0 && arr[i] == arr[i-1] {
                        continue
                    }
                    var left = i + 1
                    var right = arr.count - 1
                    while left < right {
                        let sum = first + arr[left] + arr[right]
                        if result == nil || abs(sum - target) <= abs(result! - target) {
                            result = sum
                        }
                        if sum == target {
                            return result!
                        }else if sum < target {
                            left += 1
                        }else{
                            right -= 1
                        }
                    }
                }
                return result ?? 0
            }
        }
    

    Demo地址:github

    相关文章

      网友评论

        本文标题:16. 最接近的三数之和(Swift版)

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