leetcode---1. 兩數之和

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

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

示例:

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

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

解題思路:

本題可以用暴力方法兩層for循環嵌套,這樣時間複雜度就高,可以用空間來換取時間。

Map將當前遍歷到的數組的值作爲key,下標爲value進行保存,遍歷到當前數組的時候,目標值與當前數組的差值是否在之前的數組裏出現過,如果出現過那麼在map中就有保存。那麼久找個兩個數相加爲目標值。

class Solution {
    public int[] twoSum(int[] nums, int target) {
         if(null == nums || nums.length < 2){
            return null;
        }
        int[] res = new int[2];
        Map<Integer,Integer> map = new HashMap<Integer,Integer>();
        for(int i = 0;i < nums.length;i++){
            int temp = target - nums[i];
            if(map.containsKey(temp)){
               res[0] = map.get(temp);
                res[1] = i;
            }
            else{
               map.put(nums[i],i);
            }
        }
        return res;
}
}

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章