leetcode16 最接近的三数之和

leetcode16 3Sum Closest

Posted by BY on January 8, 2019

前言

随机一题

正文

问题来源

本问题来自leetcode上的16题。

问题描述

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

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

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

分析:

func abs(n int) int {
	if n < 0 {
		return -n
	}
	return n
}
func threeSumClosest(nums []int, target int) int {
    ret := nums[0] + nums[1] + nums[2] - target
    sort.Ints(nums)
    l := len(nums)
    var i, j, k int
    var temp int
    for i = 0; i < l - 2; i++ {
        j, k = i + 1, l -1
        for j < k {
            temp = nums[i] + nums[j] + nums[k] - target
            if abs(temp) < abs(ret) {
                ret = temp
            }
            if temp > 0 {
                k--
            } else if temp < 0 {
                j++
            } else {
                return target
            }
        }
    }
    return ret + target
}

总结:

结语

不要懒,多看多写。