Leetcode演算法題逐一擊破—No.001
阿新 • • 發佈:2021-01-06
[每日一道演算法題]
# 題號:001
# 題名:兩數之和
# 難度:簡單
題目描述:
- 給定一個整數陣列 nums 和一個整數目標值 target,請你在該陣列中找出 和為目標值 的那 兩個 整數,並返回它們的陣列下標。
- 你可以假設每種輸入只會對應 一個 答案。但是,陣列中同一個元素 不能使用兩遍。
- 你可以按 任意順序 返回答案。
解題思路(一):
- 雙層迴圈遍歷陣列,在陣列中尋找target - nums[i],找到時輸出兩數的下標
解題程式碼:
class Solution {
public int[] twoSum(int[] nums, int target) {
int[] a = new int[2];
int oth;
for(int i = 0 ; i < nums.length ; i++){
oth = target - nums[i];
for(int j = i + 1 ;j < nums.length ; j++){
if(oth == nums[j]){
a[0] = i;
a[1] = j;
}
}
}
return a;
}
}
解題思路(二):
- 通過雜湊表,key為陣列nums中的元素值,value則為陣列元素下標,將nums中的元素存到HashMap中
- 利用HashMap的containsKey方法來找到指定元素,然後獲取對應下標
- 如果不存在,則丟擲異常
class Solution {
public int[] twoSum(int[] nums, int target) {
HashMap<Integer, Integer> map = new HashMap<>();
for (int i = 0; i < nums.length; i++) {
if(map.containsKey(target-nums[i])){
return new int[]{map.get(target-nums[i]),i};
}
map.put(nums[i],i);
}
throw new IllegalArgumentException("No match two sum solution");
}
}
總結
-
思路一:雙層迴圈查詢,時間複雜度O(N2),空間複雜度O(1).
-
思路二:雜湊表查詢,時間複雜度O(N),空間複雜度O(N).
來源:力扣(LeetCode)
連結:https://leetcode-cn.com/problems/two-sum