給定乙個整數陣列 nums 和乙個目標值 target,請你在該陣列中找出和為目標值的那 兩個 整數,並返回他們的陣列下標。你可以假設每種輸入只會對應乙個答案。但是,陣列中同乙個元素不能使用兩遍。
示例:將所有數字的和都算一遍,找出其中與目標值相等的返回結果。
//利用雙重迴圈兩次遍歷陣列,找出所有陣列成員彼此之和
for(
int i =
0; i < nums.length; i++);
}}}return null;
兩數之和官方題解
就是我使用的方法,不再敘述。
思路及演算法
注意到方法一的時間複雜度較高的原因是尋找 target - x 的時間複雜度過高。因此,我們需要一種更優秀的方法,能夠快速尋找陣列中是否存在目標元素。如果存在,我們需要找出它的索引。
使用雜湊表,可以將尋找 target - x 的時間複雜度降低到從 o(n)o(n) 降低到 o(1)o(1)。
這樣我們建立乙個雜湊表,對於每乙個 x,我們首先查詢雜湊表中是否存在 target - x,然後將 x 插入到雜湊表中,即可保證不會讓 x 和自己匹配。
**
class
solution;}
hashtable.
put(nums[i]
, i);}
return
newint[0
];}}
複雜度分析
利用雜湊表o(1) 時間進行資料的插入刪除和查詢的特性,
講已經遍歷過的陣列成員存入雜湊表中,
查詢現在陣列成員與以往成員的和是否等於target
用list陣列代替雜湊表更容易理解
public
static
int[
]twosum
(int
nums,
int target);}
} lastnums.
add(nums[i]);
}return null;
}
1 兩數之和
給定乙個整數陣列和乙個目標值,找出陣列中和為目標值的兩個數。你可以假設每個輸入只對應一種答案,且同樣的元素不能被重複利用。示例 給定 nums 2,7,11,15 target 9 因為 nums 0 nums 1 2 7 9 所以返回 0,1 解class solution hash nums i...
1 兩數之和
給定乙個整數陣列和乙個目標值,找出陣列中和為目標值的兩個數。你可以假設每個輸入只對應一種答案,且同樣的元素不能被重複利用。示例 給定 nums 2,7,11,15 target 9 因為 nums 0 nums 1 2 7 9 所以返回 0,1 由於元素不能重複利用,所以使用j i 1,通過雙迴圈,...
1 兩數之和
你可以假設每個輸入只對應一種答案,且同樣的元素不能被重複利用。public int twosum int nums,int target throw new illegalargumentexception no two sum solution 這樣的時間複雜度為0 nlogn 但是通過檢視官方的...