zoukankan      html  css  js  c++  java
  • 每日一道:最接近的三数之和

    package main
    
    import (
    	"fmt"
    	"math"
    	"sort"
    )
    
    /*
    给定一个包括 n 个整数的数组 nums 和 一个目标值 target。找出 nums 中的三个整数,
    使得它们的和与 target 最接近。返回这三个数的和。假定每组输入只存在唯一答案。
    
    输入:nums = [-1,2,1,-4], target = 1
    输出:2
    解释:与 target 最接近的和是 2 (-1 + 2 + 1 = 2) 。
    */
    func main() {
    	fmt.Println(threeSumClosest1([]int{-1, 2, 1, -4}, 1)) // 2
    }
    /*
    先把前三位数求和,循环第一位固定,取第二位和最后一位数,指针收缩
     */
    func threeSumClosest1(nums []int, target int) int {
    	sort.Ints(nums)
    	result := nums[0] + nums[1] + nums[2]
    	for i := 0; i < len(nums)-2; i++ {
    		m, n := i+1, len(nums)-1
    		for m < n {
    			// 此处加入比较,当三数之和离目标值更近时,用此三个数之和代替初始的三个数
    			sum := nums[i] + nums[m] + nums[n]
    			if math.Abs(float64(sum-target)) < math.Abs(float64(result-target)) {
    				result = sum
    			}
    			switch {
    			case sum > target:
    				n--
    			case sum < target:
    				m++
    			default:
    				return sum
    			}
    		}
    	}
    	return result
    }
    

      

  • 相关阅读:
    Java-笔记9-复习
    Java-笔记9
    Java-笔记8-复习
    Java0-笔记8
    Java-笔记7-复习
    hadoop-hdfs-ha配置-搭建
    Java-笔记7
    Java-笔记6-复习
    kettle-作业和参数
    kettle-脚本控件
  • 原文地址:https://www.cnblogs.com/csp813/p/15597077.html
Copyright © 2011-2022 走看看