力扣 01 兩數之和

2021-09-28 15:29:25 字數 1198 閱讀 6274

easy!

題目描述

給定乙個整數陣列和乙個目標值,找出陣列中和為目標值的兩個數。

你可以假設每個輸入只對應一種答案,且同樣的元素不能被重複利用。

示例:

給定 nums = [2, 7, 11, 15], target = 9

因為 nums[0] + nums[1] = 2 + 7 = 9

所以返回 [0, 1]

這道題給了我們乙個陣列,還有乙個目標數target,讓我們找到兩個數字,使其和為target,乍一看就感覺可以用暴力搜尋,但是猜到oj肯定不會允許用暴力搜尋這麼簡單的方法,於是去試了一下,果然是time limit exceeded,這個演算法的時間複雜度是o(n^2)。那麼只能想個o(n)的演算法來實現,由於暴力搜尋的方法是遍歷所有的兩個數字的組合,然後算其和,這樣雖然節省了空間,但是時間複雜度高。一般來說,我們為了提高時間的複雜度,需要用空間來換,這算是乙個trade off吧,我們只想用線性的時間複雜度來解決問題,那麼就是說只能遍歷乙個數字,那麼另乙個數字呢,我們可以事先將其儲存起來,使用乙個hashmap,來建立數字和其座標位置之間的對映,我們都知道hashmap是常數級的查詢效率,這樣,我們在遍歷陣列的時候,用target減去遍歷到的數字,就是另乙個需要的數字了,直接在hashmap中查詢其是否存在即可,注意要判斷查詢到的數字不是第乙個數字,比如target是4,遍歷到了乙個2,那麼另外乙個2不能是之前那個2,整個實現步驟為:先遍歷一遍陣列,建立hashmap對映,然後再遍歷一遍,開始查詢,找到則記錄index。

class solution 

//然後再遍歷一遍,開始查詢,找到則記錄index

for (int i = 0; i < nums.size(); ++i)

}return res;

}};

或者可以寫得更簡潔一些,把兩個for迴圈合併成乙個(注意到答案一中兩個for迴圈的迴圈條件是一模一樣的),那麼就有了下面的

class solution ;

}m[nums[i]] = i;

}return {};

}};

解決思路:

第乙個for迴圈把陣列遍歷一遍,建立map資料,第二個for迴圈進行查詢,找到符合條件的則記錄index。

兩數之和 力扣

這是我寫的第一篇部落格,以前也有過想法,但是總是懶惰,昨晚正好開始刷力扣,就用部落格全程記錄一下吧。刷的第一道題目是兩數之和,題目是這樣的 給定乙個整數陣列 nums 和乙個目標值 target,請你在該陣列中找出和為目標值的那 兩個 整數,並返回他們的陣列下標。你可以假設每種輸入只會對應乙個答案。...

力扣 兩數之和

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

力扣 兩數之和

題目很簡單,但是如果用一般的方法,會超出時間限制。所以需要另一種思路,題解給的另一種思路是 查詢表法 有2種實現方法,雜湊表和平衡二叉搜尋樹。因為不需要維護表中元素的順序,所以就用雜湊表。不知道為啥,很奇怪,我自己寫的暴力演算法,第一次測試,系統說超出時間限制,我覺得是我的問題,然後就開始研究,找了...