博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
16. 3Sum Closest (python)
阅读量:3732 次
发布时间:2019-05-22

本文共 1094 字,大约阅读时间需要 3 分钟。

Given an array S of n integers, find three integers in S such that the sum is closest to a given number, target.

Return the sum of the three integers. You may assume that each input would have exactly one solution.
For example, given array S = {-1 2 1 -4}, and target = 1.
The sum that is closest to the target is 2. (-1 + 2 + 1 = 2).
题意:在数组S中找到三个元素相加和最接近目标值,只有一组解,返回三元素的和
思路:类似于15的思路,做稍许改动,先任意取三元素和triple;记录和目标的差值diff
每次取一个数,在后续列表中找2sum满足三数之和最接近target,通过判断三数之和和目标的差值和diff大小,小于diff则将三数之和和差值赋值给triple和diff,然后再分析和小于移动左指针,大于移动右指针,直到遍历找到最接近的数
注意:不能先比较三数之和和目标值大小移动左右指针,遍历完才计算差值。而应该每次移动指针后都要计算差值,取差值最小的三数之和存储。
举例说明:若目标值为0,三数之和为-1,需要移动左指针,假设移动后此时三数之和为2,那么计算时就会比较2而不是1和目标的差值。因此要在移动指针后就要计算差值,-1是计算一次,2时计算一次。
Runtime: 122 ms

class Solution(object):    def threeSumClosest(self, nums, target):        if len(nums)<3:            return  []        nums=sorted(nums)        triple=nums[0]+nums[1]+nums[-1]          #三数最接近目标值之和        diff=abs(target-triple)        for i in range(0,len(nums)-2):            if nums[i]!=nums[i-1] or i==0:       #去重                l,r=i+1,len(nums)-1                  while  l

转载地址:http://scfin.baihongyu.com/

你可能感兴趣的文章
C 递归 个人笔记
查看>>
QT的基本知识类和成员函数 个人笔记
查看>>
C++ 算法 分治法 个人笔记
查看>>
C++数据结构 选择排序 个人笔记
查看>>
c++ 冒泡排序 个人笔记
查看>>
C++ 插入排序 个人笔记
查看>>
C++ 希尔排序 个人笔记
查看>>
C++ 归并排序 个人笔记
查看>>
C++ 快速排序 个人笔记
查看>>
c++ 查找算法 二分查找 个人笔记
查看>>
C语言 百鸡百钱的优化 穷举搜索
查看>>
c++ 查找算法 并行搜索 个人笔记
查看>>
C++ 动态规划算法 个人笔记
查看>>
c++ 回溯算法 个人笔记
查看>>
C语言 LeetCode two sum 问题和 实现一个mySqrt函数
查看>>
C语言 leetcode 刷题 个人笔记
查看>>
二叉树的中序遍历
查看>>
c 语言 leetcode k个一组翻转链表
查看>>
vector 容器erase() 错误用法
查看>>
cc++ 递归模板
查看>>