兩數之和I

2021-10-08 09:10:49 字數 2865 閱讀 8801

你可以假設每種輸入只會對應乙個答案。但是,陣列中同乙個元素不能使用兩遍。

例:

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

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

所以返回 [0, 1]

這道題在題庫中屬於簡單難度

最簡單的解題方式就是暴力解題法

即就是直接用巢狀迴圈來暴力搜尋符合條件的值,時間複雜度位o(n^2)效率不高,後面會附上暴力解題的**,這裡就不說這種方法了。

我們這裡說一下本人覺得較為快速的方法

這種方法用到了stl中的 mutimap

我們在用mutimap之前先要得知,mutimap在底層是以紅黑樹實現的,紅黑樹的特點即為中序遍歷時是按照一定順序排列的,在multimap中key–value(鍵值對)是以按照key從小到大預設排序的

知道了mutimap的特點我們可以通過將給定的陣列先存入mutimap中,存入之後multimap會自動調整key值,將其值變成預設從大到小的有序狀態,我們至此完成了第一步。

接下來我們用兩個迭代器來分別來獲取mutimap的 「begin」 和 「end」(這裡的end指的是可以訪問最後乙個元素的位置迭代器),兩個迭代器分別從開始的位置和最後乙個元素的位置,第二步完成。

利用迴圈進行兩個迭代器中儲存位置的數值相加和目標值比較,如果比target目標值大,我們就將end–(因為在第一步mutimap中數值已經有了順序,這裡比target大,我們就要將大的值減小,即為end–);如果比target目標值小,我們就將begin++;如果正好相等即得到最終解,最後用容器儲存返回到主函式。

//第二步

multimap<

int,

int>

::iterator it_begin = mymap.

begin()

; multimap<

int,

int>

::iterator it_end =

--mymap.

end();

int flag =0;

vector<

int> vec;

//第三步

兩數之和,三數之和

兩數之和 方法一 暴力 throw new illegalargumentexception 時間複雜度 o n 2 空間複雜度 o 1 public int twosum int nums,int target throw newillegalargumentexception no twosum...

leetcode 兩數之和與兩數之和

題目描述 給定乙個已按照公升序排列 的有序陣列,找到兩個數使得它們相加之和等於目標數。函式應該返回這兩個下標值 index1 和 index2,其中 index1 必須小於 index2。說明 返回的下標值 index1 和 index2 不是從零開始的。你可以假設每個輸入只對應唯一的答案,而且你不...

兩數之和 三數之和 四數之和

兩數之和意思就是 給你乙個陣列,從中找出兩個數字,讓他們的和等於乙個具體的target。找到所有這樣的兩個數。並且這兩個數字不能完全一樣。n數之和的意思是 給你乙個陣列,從中找出n個數字,讓他們的和等於乙個具體的target。找到所有這樣的n個數。並且這n個數字不能完全一樣。最基礎的,也是最關鍵的就...