leetcode第16题,最接近的三数之和,python实现
2018-10-15 20:29
441 查看
题目解析
该题目和三数之和类似,不同点是target也会发生变化,解答基本思路是根据要求不断变化target值,使其偏离原始target的程度越来越大,在此过程中检测当前的target值是否可以由数组中三数之和进行表示。
三数之和求法回顾
检查数组中是否存在三个数相加之和等于target值,思路为先将数组进行排序,然后进行遍历,遍历过程见代码。
class Solution(object): def threeSumClosest(self, nums, target): """ :type nums: List[int] :type target: int :rtype: int """ nums = sorted(nums) result = 0 if len(nums) ==3: # 若只有三个数,则返回三数之和 return sum(nums) j=0 flag=1 test = [] newTarget = target while True: for i in range(len(nums)-2): if i!=0 and nums[i]==nums[i-1]: # 若该数和之前数值相同,则跳过 continue l,r = i+1,len(nums)-1 # 定义左边和右边的起始位置 while (l < r): if newTarget == nums[i] + nums[l] + nums[r]: # return newTarget,test,[nums[i],nums[l],nums[r]],nums return newTarget elif newTarget > nums[i] + nums[l] + nums[r]: l += 1 else: r -= 1 j = j+1 if flag == 1 else j # 确定target变更长度 flag = -flag # 反转target变更方向 test.append(newTarget) newTarget = target +
flag * j
阅读更多相关文章推荐
- LeetCode- 16. 最接近的三数之和 (Medium)python和c++实现
- LeetCode 92 Reverse Linked List II (Python详解及实现)
- [leetcode]55. Jump Game ,C++/PYTHON实现,medium难度
- 【LeetCode】423. Reconstruct Original Digits from English(Python实现)
- 【leetCode】Path Sum II python实现
- 【leetCode】Sum Root to Leaf Number python实现
- LeetCode 56 Merge Intervals(Python实现及详解)
- [leetcode]Two Sum C++ python实现
- leetcode(263,389) python实现
- LeetCode 60 Permutation Sequence (Python实现及详解)
- leetcode 【 Sort Colors 】python 实现
- python实现 leetcode 771 jewels and stones
- leetcode练习(441,442)python实现
- LeetCode62. 不同路径 动态规划 python3实现
- leetcode 【 Search in Rotated Sorted Array 】python 实现
- LeetCode 51. N-Queens--Python实现
- leetcode练习(204) 多种方法求质数 python实现
- LeetCode 89 Gray Code (Python详解及实现)
- leetcode 【 Plus One 】python 实现
- LeetCode 61. Rotate List---Python实现