题目:
思路:
首先要对数组进行排序,方便后续的操作,并暂时存储前三个数的和用作后续的比较。之后定义三个数的位置,利用i j k 来表示的话,假设i是第0个,则j=i+1,k=len(nums)-1
,之后需要存储三数之和并与前三个数的和进行比较,并根据三数之和的大小来移动j和k的位置
(文字说明可能有些不清晰,可以看代码注释进行理解)
代码如下:
class Solution:
def threeSumClosest(self, nums: List[int], target: int) -> int:
# 排序
nums.sort()
# 先取前三个数的和做备用
res = sum(nums[:3])
for i in range(len(nums)):
# 定义j是i右边的数,k是结尾的数
j = i + 1
k = len(nums) - 1
while j < k:
# 求三数之和
temp = nums[i] + nums[j] + nums[k]
# 比较三数之和与前三个数和的大小
if abs(res - target) > abs(temp - target):
res = temp
# 三数之和大,就让k左移,整体会变小
if temp > target:
k = k - 1
# 三数之和小,j右移,整体会变大
else:
j = j + 1
return res