【LeetCode-01】-兩數之和

【題目】

給定一個整數數組 nums 和一個目標值 target,請你在該數組中找出和爲目標值的那 兩個 整數,並返回他們的數組下標。

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

示例:

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

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

【思路】

方法一:暴力法

暴力法很簡單,只需要遍歷數組,查找是否存在target-nums[i]。時間複雜度O(n2)O(n^2)

public static int[] twoSum(int[] nums,int target){
        for (int i = 0; i < nums.length; i++) {
            for (int j = i+1; j < nums.length; j++) {
                if (nums[j]==(target-nums[i])){
                    return new int[] {i,j};
                }
            }
        }
        throw  new IllegalArgumentException("No two sum solution");
    }

方法二:利用哈希表

  • 遍歷數組nums,每個值判斷map中是否存在target-nums[i]的key。
  • 如果存在則找到兩個值,返回數組下標,如果不存在將當前(nums[i],i)(存入map時,key:數組的值,value:對應的下標)存入map中,繼續遍歷,直到最後
  • 如果最終沒找到,拋出異常
  • 時間複雜度爲O(n)
public static 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 two sum solution");
    }
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章