LeetCode刷题笔记第16题:最接近的三数之和
想法:
要求数组中最接近目标值的三数之和。
- 将列表按从小到大重新排序
- 以列表循环遍历(first)
- 设置两个指针,second从first后一个元素开始想右移动,third从列表最后一个元素开始向左移动
- 因为列表从小到大重新排序了,当三数和大于目标值则third向左移动一位,当三数和小于目标值则second向右移动,当三数和与目标值相等则返回三数之和
- 如列表遍历结束都没有与目标值相等的情况出现则返回最接近的三数之和
时间复杂度: O ( n 2 ) O(n^2) O(n2)
空间复杂度: O ( n ) O(n) O(n)
class Solution:
def threeSumClosest(self, nums: List[int], target: int) -> int:
sum = float("inf")
nums.sort()
for first in range(len(nums)-2):
second = first + 1
third = len(nums) - 1
while second != third:
tmp = nums[first] + nums[second] + nums[third]
sum = tmp if abs(tmp - target) < abs(sum - target) else sum
if tmp == target:
return target
if tmp > target:
third -= 1
else:
second += 1
return sum