兩數之和 LeetCode 01

2021-10-24 07:53:25 字數 1468 閱讀 1160

題目描述

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

你可以假設每種輸入只會對應乙個答案。但是,你不能重複利用這個陣列中同樣的元素。

示例:

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

因為 nums[0] + nums[1] = 2 + 7 = 9 所以返回 [0, 1]

這道題目給我們乙個陣列,陣列裡面全是整數,然後再給我們乙個數字 target ,需要我們求出在這個陣列中哪兩個數字的和正好是 target 。注意,你不能重複利用這個陣列中同樣的元素,指的是每乙個位置上的數字只能被使用一次,比如陣列 [1,1,3],你可以使用第乙個和第二個 1,但是你不能使用第乙個 1 兩次。

這種方法很簡單,就是暴力解法,雙重迴圈遍歷就可以了 。外層迴圈從陣列中取出下標為 i 的元素 num[i] ,內層迴圈取出 i 之後的元素 nums[j] 一一與下標為 i 的元素進行相加操作,判斷結果是否為target 。題目只要求找到一種,所以一旦找到直接返回。時間複雜度中的 n 代表的是 nums 列表的長度。

下面我們來看**:

class

solution;}

}}return null;

}}

上面的思路 1 時間複雜度太高了,是典型的加快時間的方法,這樣做是不可取的。其實我們可以犧牲空間來換取時間。

我們希望,在我們順序遍歷取得乙個數 num[1] 的時候,就知道和它配對的數target - num1 是否在我們的 nums 裡面,並且不單單只存在乙個。比如說 target 為 4,nums 為 [2,3],假設我們此時取得的 num1 為 2,那麼和它配對的 2 確實在 nums 中,但是數字 2 在nums 中只出現了一次,我們無法取得兩次,所以也是不行的。

因此我們有了下面的步驟:

建立乙個 hashmap ,key 存放 nums[i] ,value 存放索引 i ;

判斷 hashmap 中是否存在target - cur ,則當前值cur 和某個hashmap 中的 key 值相加之和為 target ;

如果存在,則返回target - cur 的 index 與當前值 cur 的 index;

如果不存在則將當前數字 cur 為key,當前數字的 index 為value 存入 hashmap 。

下面我們來看下**:

class

solution;}

// 每次遍歷過的值都儲存到 map 中,這樣之後就能從 map 中尋找需要的目標值

map.

put(nums[i]

, i);}

return null;

}}

Leetcode01 兩數之和

我的提交 暴力解法 class solution for int i 0 i nums.length i throw new illegalargumentexception no two sum solution 複雜度分析 方法三 一遍雜湊表 事實證明,我們可以一次完成。在進行迭代並將元素插入到...

LeetCode 01兩數之和

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

Leetcode01 兩數之和

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