zoukankan      html  css  js  c++  java
  • leetcode16 3-Sum

    题目链接

    给定数组a[](长度不小于3)和一个数字target,要求从a中选取3个数字,让它们的和尽量接近target。
    解法:首先对数组a进行排序,其次枚举最外面两层指针,对于第三个指针肯定是从右往左(由大变小)慢慢单向滑动的。

    class Solution(object):
        def __init__(self):
            self.ans=0xffffffffff
        def threeSumClosest(self, nums, target): 
            nums=sorted(nums) 
            def update(i,j,k):#更新答案
                now_ans=nums[i]+nums[j]+nums[k]
                if abs(self.ans-target)>abs(now_ans-target):
                    self.ans=now_ans
            for i in range(len(nums)-2):
                k=len(nums)-1
                for j in range(i+1,len(nums)-1): 
                    while k>j and nums[i]+nums[j]+nums[k]>target:
                        k-=1
                    if k<j:
                        update(i,j,j+1)
                        break 
                    if k>j and k<len(nums):
                        update(i,j,k) 
                    if k>=j and k+1<len(nums):
                        update(i,j,k+1)
            return self.ans
    
  • 相关阅读:
    [HDU6793] Tokitsukaze and Colorful Tree
    [NOI2020]命运
    [NOI2020]美食家
    模拟9
    晚测2
    模拟8
    联考4
    模拟7
    模拟6
    关于数论
  • 原文地址:https://www.cnblogs.com/weiyinfu/p/7582384.html
Copyright © 2011-2022 走看看