LeetCode之兩數之和
題目:給定一個整數陣列 nums 和一個目標值 target,請你在該陣列中找出和為目標值的那 兩個 整數,並返回他們的陣列下標。
你可以假設每種輸入只會對應一個答案。但是,陣列中同一個元素不能使用兩遍。
示例:
解析:本題有倆種解法,一種是簡單粗暴的暴力破解,另外一種是巧妙地運用到了JavaSE提供的API裡面的雜湊表來提高執行效率。
方法一:暴力破解法
class Solution {
public int[] twoSum(int[] nums, int target) {
int n = nums.length;
for (int i = 0; i < n; ++i) {
for (int j = i + 1; j < n; ++j) {
if (nums[i] + nums[j] == target) {
return new int[]{i, j};
}
}
}
return new int[0];
}
}
複雜度分析
時間複雜度:O(N^2),其中 N 是陣列中的元素數量。最壞情況下陣列中任意兩個數都要被匹配一次。
空間複雜度:O(1)
雜湊表法:
解題思路:
注意到方法一的時間複雜度較高的原因是尋找 target - x 的時間複雜度過高。因此,我們需要一種更優秀的方法,能夠快速尋找陣列中是否存在目標元素。如果存在,我們需要找出它的索引。
使用雜湊表,可以將尋找 target - x 的時間複雜度降低到從 O(N) 降低到 O(1)。
這樣我們建立一個雜湊表,對於每一個 x,我們首先查詢雜湊表中是否存在 target - x,然後將 x 插入到雜湊表中,即可保證不會讓 x 和自己匹配。
class Solution {
public int[] twoSum(int[] nums, int target) {
Map<Integer, Integer> hashtable = new HashMap<Integer, Integer>();
for (int i = 0; i < nums.length; ++i) {
if (hashtable.containsKey(target - nums[i])) {
return new int[]{hashtable.get(target - nums[i]), i};
}
hashtable.put(nums[i], i);
}
return new int[0];
}
}
複雜度分析
時間複雜度:O(N),其中 NN 是陣列中的元素數量。對於每一個元素 x,我們可以 O(1)地尋找 target - x。
空間複雜度:O(N),其中 NN 是陣列中的元素數量。主要為雜湊表的開銷。
相關文章
- LeetCode:兩數之和LeetCode
- LeetCode - 兩數之和LeetCode
- LeetCode 1 兩數之和LeetCode
- leetcode #1 兩數之和LeetCode
- LeetCode-兩數之和LeetCode
- python leetcode 之兩數之和(two sum)PythonLeetCode
- LeetCode: Two sum(兩數之和)LeetCode
- LeetCode 1. 兩數之和LeetCode
- LeetCode-1. 兩數之和LeetCode
- [LeetCode] Two Sum 兩數之和LeetCode
- leetcode-0001 兩數之和LeetCode
- 組隊刷LeetCode - 兩數之和LeetCode
- LeetCode 1 兩數之和(簡單)LeetCode
- LeetCode 之 JavaScript 解答第一題 —— 兩數之和(Two Sum)LeetCodeJavaScript
- [LeetCode 刷題] 1. 兩數之和LeetCode
- LeetCode題集-1- 兩數之和LeetCode
- 兩數之和
- 從零打卡leetcode之day 1--兩數之和LeetCode
- 每日一道 LeetCode (1):兩數之和LeetCode
- [演算法] LeetCode 1.兩數之和演算法LeetCode
- #leetcode刷題之路1-兩數之和LeetCode
- LeetCode每日一題:兩數之和(No.1)LeetCode每日一題
- leetCode解題記錄1 - 兩數之和LeetCode
- LeetCode-Python 1. 兩數之和LeetCodePython
- 2020/10/31·Leetcode·兩數之和LeetCode
- Leetcode力扣1 兩數之和(Python版)LeetCode力扣Python
- LeetCode每日一題 (32)1. 兩數之和LeetCode每日一題
- 1. 兩數之和
- LeetCode 演算法 | 兩數之和不簡單啊LeetCode演算法
- Leetcode第一題:兩數之和(3種語言)LeetCode
- Fifth. LeetCode 2:Add Two Numbers 兩數之和LeetCode
- 2020-10-12 Leetcode 兩數之和LeetCode
- 刷 LeetCode 跟著這個系列就行啦----兩數之和LeetCode
- 簡單演算法題:leetcode-1 兩數之和演算法LeetCode
- 用python手刃Leetcode(1):兩數之和【簡單題】PythonLeetCode
- 【新手小白刷leetcode記錄貼】 1.兩數之和LeetCode
- 演算法-兩數之和演算法
- 兩數之和詳細解答