leetcode刷題 16 最接近的三數之和

2022-08-24 02:42:16 字數 2556 閱讀 5626

給定乙個包括 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...