LeetCode 兩數之和

2022-08-30 20:36:09 字數 1455 閱讀 3111

給定乙個整數陣列 nums 和乙個目標值 target,請你在該陣列中找出和為目標值的那 兩個 整數,並返回他們的陣列下標。

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

示例

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

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

所以返回 [0, 1]

平時最常用的方法,使用雙迴圈,遍歷陣列。當內迴圈的j等於外迴圈的i時,跳過;當下標為ij的兩數之和等於目標值,則儲存ij,退出迴圈。

class solution }}

return indexs;

}}

缺點:需要迴圈n*n次,判斷n*(n-1)次,耗時,耗記憶體!

因判定條件是nums[i] + nums[j] == target,則i = 1, j = 2i = 2, j = 1的情況相同。故,初步思路中以j = 0為內迴圈初始條件,甚為不妥!如此,將有大約一半的迴圈是多餘的!同時,要滿足j != i,則可令j = i + 1,既除去了多餘的迴圈,又滿足j != i。內迴圈部分**如下:

for(int j = 0; j < nums.length; j++)

}

雖然減少了進一半的迴圈,但是,耗時之間少了一點點,所耗記憶體,依然很大!

nums[i] + nums[j] = target,可得兩式:

可使用單迴圈,儲存等式左邊,尋找等式右邊,由此,則將等號單側的兩個變數變為乙個,妙哉!

int indexs = new int[2];

hashmaphash = new hashmap();

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

hash.put(target-nums[i],i);

}return indexs;

int indexs = new int[2];

hashmaphash = new hashmap();

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

hash.put(nums[i],i);

}return indexs;

顯然,這次只迴圈了n次,耗時大幅減少,但是,記憶體的消耗,似乎並沒有減少!

leetcode 兩數之和與兩數之和

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

LeetCode 兩數之和

基礎不好,筆試 題沒做好,校招沒offer,趕緊來刷題 這裡採用兩種方法來做,比較效能。nums i for i in range 1,100000000 target 3 class solution object deftwosum self,nums,target if len nums 1 ...

兩數之和(LEETCODE)

給定乙個整數陣列和乙個目標值,找出陣列中和為目標值的兩個數。你可以假設每個輸入只對應一種答案,且同樣的元素不能被重複利用。示例 給定 nums 2,7,11,15 target 9 因為 nums 0 nums 1 2 7 9 所以返回 0,1 下面是 include stdafx.h includ...