給定乙個包括 n 個整數的陣列 nums 和 乙個目標值 target。找出 nums 中的三個整數,使得它們的和與 target 最接近。返回這三個數的和。假定每組輸入只存在唯一答案。
給定陣列 nums = [-1,2,1,-4], 和 target = 1.
與 target 最接近的三個數的和為 2. (-1 + 2 + 1 = 2).
雙指標兩側擴充套件
雙指標從目標值開始,同時向兩側擴充套件,取最先遇到的三個數相加
def three_sum_clostest(nums, target):
"""給定乙個包括n個整數的陣列nums和乙個目標值target。
找出nums中的三個整數,使得它們的和與target最接近。返回這三個數的和。
假定每組輸入只存在唯一答案。
"""result_sum = 0
pre_distance = {}
if target<0:
max_width = len(nums) - target
else:
max_width = len(nums) + target
current_nums_num = 0
break_flag = false
for x in nums:
# print(x)
current_dis = (target - x)
if current_dis < 0:
current_dis = - current_dis
if pre_distance.__contains__(x) and current_dis != 0:
pre_distance[x] += current_dis
elif pre_distance.__contains__(x) and current_dis == 0:
pre_distance[x] += 1
elif current_dis != 0:
pre_distance[x] = current_dis
elif current_dis == 0:
pre_distance[x] = 1
print(pre_distance)
if pre_distance.__contains__(target):
if pre_distance[target] >= 3:
result_sum = 3 * target
break_flag = true
elif pre_distance[target] < 3:
result_sum = pre_distance[target] * target
current_nums_num = pre_distance[target]
for i in range(1, max_width):
if break_flag:
break
if current_nums_num == 3:
break
if pre_distance.__contains__((target-i)):
distance = pre_distance[(target-i)]
if distance == i:
result_sum += (target-i)
current_nums_num += 1
elif (distance/i) >= (3-current_nums_num):
result_sum += (3-current_nums_num) * (target-i)
break
elif (distance/i) < (3-current_nums_num):
for j in range(1, (3-current_nums_num)):
if current_nums_num == 3:
break
result_sum += (target-i)
current_nums_num += 1
if pre_distance.__contains__((target+i)):
distance = pre_distance[(target+i)]
print(distance)
if distance == i:
result_sum += (target+i)
current_nums_num += 1
elif (distance/i) >= (3-current_nums_num):
result_sum += (3-current_nums_num) * ((target+i))
break
elif (distance/i) < (3-current_nums_num):
for j in range(1, (3-current_nums_num)):
if current_nums_num == 3:
break
result_sum += (target+i)
current_nums_num += 1
return result_sum
leetcode刷題之路16 最接近的三數之和
給定乙個包括 n 個整數的陣列 nums 和 乙個目標值 target。找出 nums 中的三個整數,使得它們的和與 target 最接近。返回這三個數的和。假定每組輸入只存在唯一答案。例如,給定陣列 nums 1,2,1,4 和 target 1.與 target 最接近的三個數的和為 2.1 2...
LeetCode刷題之16 最接近的三數之和
我不知道將去向何方,但我已在路上!例如,給定陣列 nums 1,2,1,4 和 target 1.與 target 最接近的三個數的和為 2.1 2 1 2 class solution def threesumclosest self,nums list int target int int nu...
LeetCode演算法題16 最接近的三數之和解析
給定乙個包括 n 個整數的陣列 nums 和 乙個目標值 target。找出 nums 中的三個整數,使得它們的和與 target 最接近。返回這三個數的和。假定每組輸入只存在唯一答案。例如,給定陣列 nums 1,2,1,4 和 target 1.與 target 最接近的三個數的和為 2.1 2...