C++實現(xiàn)LeetCode(170.兩數(shù)之和之三 - 數(shù)據(jù)結構設計)
[LeetCode] 170. Two Sum III - Data structure design 兩數(shù)之和之三 - 數(shù)據(jù)結構設計
Design and implement a TwoSum class. It should support the following operations: add and find.
add - Add the number to an internal data structure.
find - Find if there exists any pair of numbers which sum is equal to the value.
Example 1:
add(1); add(3); add(5);
find(4) -> true
find(7) -> false
Example 2:
add(3); add(1); add(2);
find(3) -> true
find(6) -> false
這道題讓我們設計一個 Two Sum 的數(shù)據(jù)結構,跟 LeetCode 的第一道題 Two Sum 沒有什么太大的區(qū)別,作為 LeetCode 的首題,Two Sum 的名氣不小啊,正所謂平生不會 TwoSum,刷盡 LeetCode 也枉然。記得原來在背單詞的時候,總是記得第一個單詞是 abandon,結果有些人背來背去還在 abandon,有時候想想刷題其實跟背 GRE 紅寶書沒啥太大的區(qū)別,都是一個熟練功夫,并不需要有多高的天賦,只要下足功夫,都能達到一個很不錯的水平,套用一句雞湯問來激勵下吧,“有些時候我們的努力程度根本達不到需要拼天賦的地步”,好了,不閑扯了,來看題吧。不過這題也沒啥可講的,會做 Two Sum 的這題就很簡單了,先來看用 HashMap 的解法,把每個數(shù)字和其出現(xiàn)的次數(shù)建立映射,然后遍歷 HashMap,對于每個值,先求出此值和目標值之間的差值t,然后需要分兩種情況來看,如果當前值不等于差值t,那么只要 HashMap 中有差值t就返回 True,或者是當差值t等于當前值時,如果此時 HashMap 的映射次數(shù)大于1,則表示 HashMap 中還有另一個和當前值相等的數(shù)字,二者相加就是目標值,參見代碼如下:
解法一:
class TwoSum {
public:
void add(int number) {
++m[number];
}
bool find(int value) {
for (auto a : m) {
int t = value - a.first;
if ((t != a.first && m.count(t)) || (t == a.first && a.second > 1)) {
return true;
}
}
return false;
}
private:
unordered_map<int, int> m;
};
另一種解法不用 HashMap,而是 unordered_multiset 來做,但是原理和上面一樣,參見代碼如下:
解法二:
class TwoSum {
public:
void add(int number) {
s.insert(number);
}
bool find(int value) {
for (auto a : s) {
int cnt = a == value - a ? 1 : 0;
if (s.count(value - a) > cnt) {
return true;
}
}
return false;
}
private:
unordered_multiset<int> s;
};
Github 同步地址:
https://github.com/grandyang/leetcode/issues/170
類似題目:
參考資料:
https://leetcode.com/problems/two-sum-iii-data-structure-design/
https://leetcode.com/problems/two-sum-iii-data-structure-design/discuss/52015/Beats-100-Java-Code
到此這篇關于C++實現(xiàn)LeetCode(170.兩數(shù)之和之三 - 數(shù)據(jù)結構設計)的文章就介紹到這了,更多相關C++實現(xiàn)兩數(shù)之和之三 - 數(shù)據(jù)結構設計內容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!
相關文章
VSCode搭建STM32開發(fā)環(huán)境的方法步驟
當我們的工程文件比較大的時候,編譯一次代碼需要很久可能會花費到四五分鐘,但是我們用vscode編寫和編譯的話時間就會大大縮減,本文就介紹一下VSCode搭建STM32開發(fā)環(huán)境,感興趣的可以了解一下2021-07-07
C語言sizeof和strlen的指針和數(shù)組面試題詳解
strlen是函數(shù),字符串長度,不包括停止符。而sizeof則是內存塊的大小,包括停止符。數(shù)組是一種數(shù)據(jù)類型,數(shù)據(jù)類型的本質就是固定大小,內存塊的別名??梢杂胹izeof()一般都是數(shù)據(jù)類型2022-04-04
C++實現(xiàn)LeetCode(168.求Excel表列名稱)
這篇文章主要介紹了C++實現(xiàn)LeetCode(168.求Excel表列名稱),本篇文章通過簡要的案例,講解了該項技術的了解與使用,以下就是詳細內容,需要的朋友可以參考下2021-08-08
最新VScode C/C++ 環(huán)境配置的詳細教程
這篇文章主要介紹了最新VScode C/C++ 環(huán)境配置的詳細教程,本文通過圖文并茂的形式給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下2020-11-11

