題目:數組
給定一個整數數組和一個目標值,找出數組中和爲目標值的兩個數。spa
你能夠假設每一個輸入只對應一種答案,且一樣的元素不能被重複利用。code
示例:blog
給定 nums = [2, 7, 11, 15], target = 9 由於 nums[0] + nums[1] = 2 + 7 = 9 因此返回 [0, 1]
思路分析:
1.最容易想到的應該是暴力解法, 經過遍歷整個數組每一個數,再次遍歷數組,從中找target-nums[i]的數。 時間複雜度爲O(n^2) 效率十分低下
1 public int[] twoSum(int[] nums, int target) { 2 for(int i=0;i<nums.length-1;i++){ 3 int temp=target-nums[i]; 4 for(int j=i+1;j<nums.length;j++){ 5 if(nums[j]==temp){ 6 return new int[]{i,j}; 7 } 8 } 9 } 10 return new int[] {}; 11 }
2.經過創建哈希表,咱們能夠經過用空間換時間的方法下降時間複雜度get
經過數組的值和下標創建哈希表,遍歷數組,若target-nums[i] 的值不存在於哈希表中則將[nums[i],i] 存入哈希表中 class
這樣咱們只須要遍歷一次數組 即時間複雜度爲O(n)效率
1 public int[] twoSum(int[] nums, int target) { 2 Map<Integer,Integer> map=new HashMap(); 3 for(int i=0;i<nums.length;i++){ 4 int temp=target-nums[i]; 5 if(map.get(temp)!=null){ 6 return new int[]{map.get(temp),i}; 7 } 8 else{ 9 map.put(nums[i],i); 10 } 11 } 12 return new int[]{}; 13 }