栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Python

【leetcode】最接近的三数之和,python实现

Python 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

【leetcode】最接近的三数之和,python实现

算法思路:跟上提的三数之和为0的题目解题思路一样,但是不同的地方在于它多包含了一个target,所以在计算的时候直接把target减掉,就是计算三数之和和0的距离了,所以是绝对值。
那在这里的迭代算法思路是什么。首先,循环的第一个指针是从左到右的元素以次进行迭代,然后第二个和第三个指针是L和R,刚开始是第一个指针i右边的第一个元素,R是最右边的元素,然后计算三数之和,如果该三数之和减去target的值为正数,那就要减小它,所以是R指针元素向右移一位;如果该三数之和减去target的值为负数,那就要增大它,那就是L指针向右移一位,在这里你们可能会问,为什么在减小的时候,不对L左移一位操作,因为在i指针从左到右的情况下,如果你进行L左移可能会跟遍历过的i重合,且可能会对已经进行判断过的三个数再次进行判断。如果刚好等于0就直接退出。
算法步骤:
1、对得到的列表进行排序。
2、进行三指针迭代,i指针指向数从左到右进行移动,
3、定L和R指针,L=i+1,R=len(nums)-1,即R指针目前是数组中的最后一位。
4、如果nums[i]+nums[L]+nums[R]-target>0,那么R就向左移一位,如果nums[i]+nums[L]+nums[R]-target<0。L就向右移一位,如果刚好等于0,那就直接退出,因为已经是最接近的了。
5、继续迭代直到L=R。
6、继续迭代直到i=len(nums)。

from typing import List
class Solution:
    def threeSumClosest(self, nums: List[int], target: int):
        if(len(nums)<3):
            return []
        nums.sort()      #对列表进行排序
        result = []
        close = 1000
        for i in range(0,len(nums)-2):
            L = i+1
            R = len(nums)-1
            while(L0):
                    R -= 1
                else:
                    re = [nums[i],nums[L],nums[R]]
                    L += 1
                    R -= 1
                    return close+target
        return close+target

#nums = [1]
nums = [-1,2,1,-4]
out = Solution().threeSumClosest(nums,1)
print(out)

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/768406.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号