タスク5:最も近い3及び数

タイトル

n個の整数と目標NUMSターゲットを含むアレイを考えます。NUMSは三つの整数を特定し、そのような彼らの最も近いことをターゲットにしています。3つの数字とリターン。各グループは唯一の答えのみ入力があることを前提としています。

例えば、配列NUMS = [-1,2,1、-4]、およびターゲット= 1が与えられます。

最も近いターゲットは、三及び番号2(-1 = 1 + 2 + 2)です。

問題解決:

class Solution:
    def threeSumClosest(self, nums: List[int], target: int) -> int:
        n=len(nums)
        if(not nums or n<3):  # 边界检测是否存在空列表或者长度小于3的列表
            return
        nums.sort()     # 列表排序
        min3 = abs(target)+sum(map(abs, nums))+1   # 最小值的处置给定需要考虑
        sum3 = 0
        for i in range(n):
            left=i+1    # 设置双指针,最左端和左右端(不包括最小数num[i])
            right=n-1
            while(left < right):
                sum3 = nums[i]+nums[left]+nums[right]-target
                if(sum3 == 0):
                    return target
                elif(sum3 > 0):   # 大于0,右端指针左移
                    if (abs(min3) > abs(sum3)):     # 只有当有更小值时才更新数值
                        min3 = sum3
                    right = right-1
                elif(sum3 < 0):    # 小于0,左端指针右移
                    if (abs(min3) > abs(sum3)):  # 只有当有更小值时才更新数值
                        min3 = sum3
                    left = left+1

        return min3+target
リリース5元の記事 ウォンの賞賛0 ビュー107

おすすめ

転載: blog.csdn.net/weixin_43535441/article/details/104686827