leetcode 15 3sum 兩種解法總結

2021-08-04 20:25:53 字數 1416 閱讀 5520

【方法一】

「思路」

將結果總體分為3種:

1.包含0

a.包含乙個0

b.3個都是0

2.兩正一負

3.兩負一正

按照零正負將陣列分為三組,依次兩兩組合兩正之和來檢視有沒有絕對值相等的負數,兩負數同理。最後將返回的vector去重。(注意:兩正一負,兩負一正在返回結果時要注意三個數字的順序,否則會影響去重結果)

**「結果」**runtime: 299 ms

}/*兩負一正*/

if(na>=2)

else

ret.push_back(ans);}}

}}/*兩正一負*/

if(p>=2)

else

ret.push_back(ans);}}

}}/*帶0*/

if(z>0)

}if(z>=3)

}

}sort(ret.begin(),ret.end());

ret.erase(unique(ret.begin(), ret.end()), ret.end());

return ret;

}【方法二】

「思路」

先將nums陣列由大到小排序,一次將陣列中的每乙個數當作目標數,尋找另外兩個數字。另外兩個數字相加,當結果大時second向左移乙個,當結果小時first向右移乙個。

「結果」

}leetcode上時間更短的演算法大致思想都和方法二類似,都採用了左右夾擊的方式。

leetcode 15 3Sum 暴力列舉

題意 給出長度為n的整數序列,要求找出滿足條件的所有不同三元組使得三個數和為0 兩個三元組不相同意義為 集合中至少有乙個數不同 思路 序列按公升序排序,列舉a k 接著在 0,k 1 選出兩個數a i a j 相加使得和為 a k 即為答案 複雜度o n n 由於序列是公升序排序,所以a i a j...

雙指標解決Leetcode 15 3 Sum

1.3sum其實和2sum思路差不多。只要把第三個數變成2sum的target就好了。當然要先sort一下,原陣列是無序的。2.也要考慮重複陣列的情況。比如left i left i 1 說明這個數字在i 1的時候應該考慮過了,需要skip.同理right也是一樣。還有一種重複情況是,當target...

15 3Sum 求三數之和

給你乙個包含 n 個整數的陣列 nums,判斷 nums 中是否存在三個元素 a,b,c 使得 a b c 0 請你找出所有滿足條件且不重複的三元組。注意 答案中不可以包含重複的三元組。示例 給定陣列 nums 1,0,1,2,1,4 滿足要求的三元組集合為 1,0,1 1,1,2 如果是陣列是有序...