給定乙個包括 n 個整數的陣列 nums 和 乙個目標值 target。找出 nums 中的三個整數,使得它們的和與 target 最接近。返回這三個數的和。假定每組輸入只存在唯一答案。
例如,給定陣列 nums = [-1,2,1,-4], 和 target = 1.
與 target 最接近的三個數的和為 2. (-1 + 2 + 1 = 2).
在真實的面試中遇到過這道題?
public class solution
}
和昨天一樣的題,而且感覺更像是昨天內道題的簡化版,用昨天的思維很容易就能做出來,先打卡一下去研究另一種方法。
class
solution
:def
threesumclosest
(self, nums: list[
int]
, target:
int)
->
int:
n=len(nums)
nums.sort(
) result=nums[0]
+nums[1]
+nums[2]
for i in
range
(n):
l=i+
1 r=n-
1if i>
0and nums[i]
>target and nums[i-1]
>target:
break
while ltemp=nums[i]
+nums[l]
+nums[r]
ifabs
(temp-target)
<
abs(result-target)
: result=temp
if temp==target:
return target
elif tempwhile l==nums[l]
: l+=
1 l+=
1elif temp>target:
while l==nums[r]
: r-=
1 r-=
1# else :
# break
return result
因為是求最接近的三數之和,所以再用字典來索引就有點不太合適了,我們直接用雙指標遍歷一下所有可能的情況,然後記錄一下最接近的就可以了。
class
solution
:def
threesumclosest
(self, nums: list[
int]
, target:
int)
->
int:
n=len(nums)
nums.sort(
) result=nums[0]
+nums[1]
+nums[2]
for i in
range
(n-2):
l=i+
1 r=n-
1# if i>0 and nums[i]>target and nums[i-1]>target:
# break
min_value=nums[i]
+nums[i+1]
+nums[i+2]
if min_value>target :
ifabs
(min_value-target)
<
abs(result-target)
: result=min_value
break
max_value=nums[i]
+nums[n-1]
+nums[n-2]
if max_valueifabs
(max_value-target)
<
abs(result-target)
: result=max_value
continue
while ltemp=nums[i]
+nums[l]
+nums[r]
ifabs
(temp-target)
<
abs(result-target)
: result=temp
if temp==target:
return target
elif tempwhile l==nums[l]
: l+=
1 l+=
1elif temp>target:
while l==nums[r]
: r-=
1 r-=
1# else :
# break
return result
接下來我們優化一下這個限制條件,在每次進行內層的迴圈時我們先來判斷一下這個內層迴圈是否是有必要的。
·因為當包含nums[i]時最大的和都小於,target時,我們顯然沒有必要再繼續進行內層的迴圈了,又因為還存在更大的組合,所以直接continue
·而當包含nums[i]時的最小的和都大於target的時候,我們同樣沒有必要進行內層的迴圈,而且又不比該組合更小的組合我們已經遍歷過了,所以可以直接break.
最接近的三數之和
給定乙個包括 n 個整數的陣列 nums 和 乙個目標值 target。找出 nums 中的三個整數,使得它們的和與 target 最接近。返回這三個數的和。假定每組輸入只存在唯一答案。例如,給定陣列 nums 1,2,1,4 和 target 1.與 target 最接近的三個數的和為 2.1 2...
最接近的三數之和
給定乙個包括 n 個整數的陣列nums和 乙個目標值target。找出nums中的三個整數,使得它們的和與target最接近。返回這三個數的和。假定每組輸入只存在唯一答案。例如,給定陣列 nums 1,2,1,4 和 target 1.與 target 最接近的三個數的和為 2.1 2 1 2 pu...
最接近的三數之和
題目 有點類似三數之和的進化版 給定乙個包括 n 個整數的陣列 nums 和 乙個目標值 target。找出 nums 中的三個整數,使得它們的和與 target 最接近。返回這三個數的和。假定每組輸入只存在唯一答案。例如,給定陣列 nums 1,2,1,4 和 target 1.與 target ...