打卡第五天 最接近的三數之和

2021-10-03 13:27:23 字數 1228 閱讀 8273

給定乙個包括 n 個整數的陣列 nums 和 乙個目標值 target。找出 nums 中的三個整數,使得它們的和與 target 最接近。返回這三個數的和。假定每組輸入只存在唯一答案。

例如,給定陣列 nums = [-1,2,1,-4], 和 target = 1.

與 target 最接近的三個數的和為 2. (-1 + 2 + 1 = 2).

解題思路:

(1)標籤:排序和雙指標

(2)本題目因為要計算三個數,如果靠暴力列舉的話時間複雜度會到 o(n^3),需要降低時間複雜度

(3)首先進行陣列排序,時間複雜度 o(nlogn)

(4)在陣列 nums 中,進行遍歷,每遍歷乙個值利用其下標i,形成乙個固定值 nums[i]

(5)再使用前指標指向 start = i + 1 處,後指標指向 end = nums.length - 1 處,也就是結尾處

(6)根據 sum = nums[i] + nums[start] + nums[end] 的結果,判斷 sum 與目標 target 的距離,如果更近則更新結果 ans

(7)同時判斷 sum 與 target 的大小關係,因為陣列有序,如果 sum > target 則 end–,如果 sum < target 則 start++,如果 sum == target 則說明距離為 0 直接返回結果

(8)整個遍歷過程,固定值為 n 次,雙指標為 n 次,時間複雜度為o(n^2)

(9)總時間複雜度:o(n logn) + o(n ^2) = o(n ^2)

**:

class

solution

if(sum > target)

else

if(sum < target)

else}}

return ans;

}}

執行結果:

本題與三數之和,刪除排序陣列中的重複項,移除元素之前三天打卡的題目一樣,都用到了雙指標法;與昨天的三數之和一樣,都用到了排序(arrays.sort(nums))。

本題參考了一篇題解,並且對題解進行了優化,使其執行時間從9ms,擊敗35%的使用者到5ms,擊敗95%的使用者。優化的地方就是把迴圈內部的計算提前到迴圈外面,節省了計算時間。

打卡第五天 Task05 最接近的三數之和

給定乙個包括 n 個整數的陣列 nums 和 乙個目標值 target。找出 nums 中的三個整數,使得它們的和與 target 最接近。返回這三個數的和。假定每組輸入只存在唯一答案。例如,給定陣列 nums 1,2,1,4 和 target 1.與 target 最接近的三個數的和為 2.1 2...

打卡第五天

給你一堆具有長度和重量的木頭,讓你去機器裡加工,機器會有乙個一分鐘的set時間,首次加工需要set一次,當連續放入的木頭不滿足後者的長度和重量都大於等於前者時,機器需要set一下,讓你求出最短的set時間 不用求出序列 三 思路分析 我們會非常直觀的想到從小到大進行排序,但很遺憾,長度和重量我們都必...

python打卡第五天

當不按順序提供預設引數時,需要把引數名寫上去 定義預設引數要牢記 預設引數必須指向不變物件 設計不變物件是因為不變物件一旦建立就不能修改,減少了由於修改資料導致的錯誤,而且由於物件不變,多工環境下同時讀取物件不需要加鎖。因此在程式設計時盡量使用不變物件 可變引數 可變引數是要求在引數前加個 號,引數...