leetcode 1.兩數之和

題目:數組

給定一個整數數組和一個目標值,找出數組中和爲目標值的兩個數。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     }
相關文章
相關標籤/搜索