美文网首页
16. 最接近的三数之和

16. 最接近的三数之和

作者: 邦_ | 来源:发表于2022-07-28 10:32 被阅读0次

先dfs,好吧。超时= =。。


func threeSumClosest(_ nums: [Int], _ target: Int) -> Int {
      
        var tempArray:[Int] = []
        var ans = 0
        var sum = 0
        var minDecount = Int.max
        let sortNums = nums.sorted()
        dfs(0,sortNums,target,sortNums.count,0,&minDecount,&tempArray,&ans,&sum)
                 
        return ans
    
    
    }
    
    
    func dfs(_ index:Int, _ sortNums:[Int],_ target:Int,_ len:Int,_ begin:Int,_ minDecount:inout Int,_ tempArray: inout [Int],_ ans: inout Int,_ sum:inout Int){
    
        
        if index == 3 {
            var tempDecount = 0
            if sum > target {
                tempDecount = sum - target
            }
            else {
                tempDecount = target - sum
            }

            if tempDecount < minDecount {
                minDecount = tempDecount
                ans = sum
            }

            return
        }
        //每一层可以选择的
        for i in begin..<len {
            let num = sortNums[i]
            sum += num
            tempArray.append(num)
            dfs(index + 1,sortNums.sorted(),target,len,i + 1,&minDecount,&tempArray,&ans,&sum)
            sum -= tempArray.removeLast()
        }

    }

开始三指针= =。。


func threeSumClosest(_ nums: [Int], _ target: Int) -> Int {
      
        let sortNums = nums.sorted()
        let len = sortNums.count
        var ans = 0
        var sum = 0
        var decount = Int.max
        var c = 1,r = len - 1
        for i in 0..<len - 2 {
            let num1 = sortNums[i]
            if i > 0 && num1 == sortNums[i - 1] {
                continue
            }
            c = i + 1
            r = len - 1
            while c < r {
                let num2 = sortNums[c]
                let num3 = sortNums[r]
                sum = num1 + num2 + num3
                if sum == target {
                    return sum
                }
                
                var tempDecount = 0
                if sum > target {
                    
                    tempDecount = sum - target
                    r -= 1
                   while c < r && sortNums[r] == sortNums [r - 1] {
                    r -= 1
                   }
                                        
                }else {
                    tempDecount = target - sum
                    c += 1
                    while c < r && sortNums[c] == sortNums [c + 1] {
                        c += 1
                    }
                    
                }
                //说明差值比较小
                if tempDecount < decount {
                    decount = tempDecount
                    ans = sum
                }
               
                
            }
  
            
        }

        
        return ans
    
    
    }






相关文章

  • LeetCode-16 最接近的三数之和

    题目:16. 最接近的三数之和 难度:中等 分类:数组 解决方案:双指针 今天我们学习第16题最接近的三数之和,这...

  • 力扣每日一题:16.最接近的三数之和 双指针解法

    16.最接近的三数之和 https://leetcode-cn.com/problems/3sum-closest...

  • 16.最接近的三数之和

    16.最接近的三数之和 题目链接:https://leetcode-cn.com/problems/3sum-cl...

  • 16. 三数之和最接近

    题目 给定一个整数数组 nums 和一个目标数 target,在 nums 中找出三个数,要求其和与 targe...

  • algrithrom

    求和问题,双指针解决 done 两数之和 三数之和 最接近三数之和 四数之和 链表反转问题 done 链表反转 链...

  • 16. 最接近的三数之和

    一、题目原型: 给定一个包括 n 个整数的数组 nums 和 一个目标值 target。找出 nums 中的三个整...

  • 16.最接近的三数之和

    题目给定一个包括 n 个整数的数组 nums 和 一个目标值 target。找出 nums 中的三个整数,使得它们...

  • 16. 最接近的三数之和

    知乎ID: 码蹄疾码蹄疾,毕业于哈尔滨工业大学。小米广告第三代广告引擎的设计者、开发者;负责小米应用商店、日历、开...

  • 16. 最接近的三数之和

    16.最接近的三数之和 给定一个包括n个整数的数组nums和 一个目标值target。找出nums中的三个整数,使...

  • 16.最接近的三数之和

    给定一个包括 n 个整数的数组 nums 和 一个目标值 target。找出 nums 中的三个整数,使得它们的和...

网友评论

      本文标题:16. 最接近的三数之和

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