Leecode刷題日記1-兩數之和【Java】

兩數之和

1.題目描述

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

你可以假設每種輸入只會對應一個答案。但是,數組中同一個元素不能使用兩遍。

示例:

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

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

2.思路

2.1.暴力法,時間複雜度爲 0(n^2)

從第一個數字開始,依次與後續數組求和,查看是否與目標值相等,,線上執行效率,時間 <30%,空間<5%,結果較差。

    public int[] twoSum(int[] nums, int target) {
        int[] result = {0,0};
        for(int i=0;i<nums.length;i++){
           for(int j = i+1;j<nums.length;j++){
               if(nums[i]+nums[j]==target)
                    {
                        result[0] = i;
                        result[1] = j;
                        return result;
                    }
           }
        }
        return result;
    }

2.2 利用hashMap,時間複雜度爲 O(N).

​ 思路,將每個元素與目標值的差值,也就是補數,存在表中,一次循環。如果hashMap中存在這個key,說明前面的遍歷過程已經存過,那麼就去找存它的下標就行了。簡直聰明!

 public int[] twoSum(int[] nums, int target) {
        int[] result = {0,0};
        
        HashMap<Integer,Integer> hash = new HashMap<Integer,Integer>();
        for(int i = 0; i < nums.length; i++){
            if(hash.containsKey(nums[i])){
                result[0] = i;
                result[1] = hash.get(nums[i]);
                return result;
            }
            // 將數據存入 key爲補數 ,value爲下標
            hash.put(target-nums[i],i);
        }
        return result;
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章