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

一、题目

给定一个包括 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

©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

友情链接更多精彩内容