關於PHP求解三數之和問題詳析

2022-09-26 02:36:10 字數 946 閱讀 9189

三數之和

給你乙個包含 n 個整數的陣列 nums,判斷 nums 中是否存在三個元素 a,b,c ,使得 a + b + c = 0 ?請你找出所有滿足條件且不重複的三元組。

注意:答案中不可程式設計客棧以包含重複的三元組。

示例:給定陣列 nums = [-1, 0, 1, 2, -1, -4],

滿足要求的三元組集合為:

[ [-1, 0, 1],

[-1, -1, 2]

]**:力扣(leetcode) 鏈結:

解題思路 1

暴力列舉法,三層 for + if 判斷就可以了,這樣作面試中 offer 會成為別人的。 不寫**了,資料量大了也容易超時。

解題思路 2

可以先固定乙個值,然後尋找後兩個值時可採取雙指標的方法,將總的時間複雜度優化到 o(n^2)。

實現的過程中,要注意優化以及去重。

首先我們先對原陣列進行排序,這樣可以把重複的值集中到一起,便於去重。

確定第乙個元素時,如果它已經比 0 大了,那麼可以直接跳出迴圈,因為後面的數字都比它大。如 [1, 2, 3, 4], i = 0, nums[i] > 0, 這樣是不可能產生合法的情況的,直接 break。

確定第乙個元素時,如果發現它與它前面的值一樣,那麼跳過本輪。如 [-1, -1, 0, 1], 在第一輪後,已經選出了 , 程式設計客棧現在 i = 1,nums[i] == nums[i程式設計客棧 - 1], 為了避免重複,直接 continue。

接下來利用雙指標,left 指向 i + 1, right 指向 count($nums) - 1。逐個進行判斷,並注意去重。有點類似於固定在乙個值,然後剩下的用雙指標求兩數之和。

class solution else if ($nums[$left] + $nums[$right] < $target) else

} }return $result;

}}參考鏈結:

每日一題 求解兩數之和PHP篇

題目如下 兩數之和 給定乙個整數陣列 nums 和乙個目標值 target,請你在該陣列中找出和為目標值的那 兩個 整數,並返回他們的陣列下標。你可以假設每種輸入只會對應乙個答案。但是,陣列中同乙個元素不能使用兩遍。示例 給定 nums 2 7,11 15 target 9因為 nums 0 num...

Leetcode 兩數,三數,四數之和問題剖析

你一定遇到以下問題,對其頭腦發熱 題目的目的 給定乙個序列 未排序 多數相加等於特定值,找出其所有符合條件的所有 多數 序列。2.左指標 l 右指標 r 索引的序列元素值等於給定值,則記錄其序列,並 l,r 操作,縮短區間準備下一次查詢 相加的值等於 目標值的 l,r 指向元素 3.左指標 l 右指...

三數之和問題(leetcode15)

三數之和問題 leetcode15 找出乙個陣列中是否存在三個元素a,b,c,使得a,b,c 0。找出滿足條件切 a,b,c不重複的三元組。找到的三元組也不能重複。陣列長度 3,不存在這樣的三元組。對陣列進行排序,遍歷陣列,當前元素位置為 i,設定左右指標,左指標 l ll 指向第乙個比當前元素的大...