1. 程式人生 > 其它 >Leetcode演算法題逐一擊破—No.001

Leetcode演算法題逐一擊破—No.001

技術標籤:演算法leetcode

[每日一道演算法題]

# 題號: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