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     }
相关文章
相关标签/搜索