1.Two Sum

作者: 夏臻Rock | 来源:发表于2017-09-19 18:34 被阅读0次

    Given an array of integers, return indices of the two numbers such that they add up to a specific target.
    You may assume that each input would have exactly one solution, and you may not use the same element twice.



    编程语言:java


    第一次尝试:就是普通的使用两个for循环,遍历寻找给出的数组中的数,计算两数之和,当有两个数字之和为目标数字时,就跳出循环并返回这两个数字的下标。
    class Solution {
    public int[] twoSum(int[] nums, int target) {
        int[] result = new int[2];
         A:for(int i=0;i<nums.length-1;i++){
             for(int j=i+1;j<nums.length;j++){
                 if(target == nums[i]+nums[j]){
                     result[0] = i;
                     result[1] = j;
                     break A;
                 }
             }
         }
        return result;
    }
    }
    

    在网上看到,这种基本的方法虽然能解决问题,但是不够快捷,也不够逼格,看见有人使用hashMap来解决这个问题,小白没有学过hashmap,所以,借此机会,顺便学习一下。使用hashmap将原本算法的时间复杂度由O(N)降为O(1),key存放数值,value存放出现的位置,从前向后进行遍历,用目标值减去当前的值,看是否存在map中,若存在则取出相应的标号,退出。
    Best Practice:

    public int[] twoSum(int[] nums, int target) {
    int[] answer = new int[2];
    HashMap<Integer, Integer> map = new HashMap<>();
    for (int i = 0; i < nums.length; ++i){
        map.put(nums[i], i);
    }
    for (int i = 0; i < nums.length; ++i){
        int b = target - nums[i];
          if (map.containsKey(b) && i != map.get(b))
              return new int[]{i, map.get(b)};
     }
     return answer;
    }

    相关文章

      网友评论

          本文标题:1.Two Sum

          本文链接:https://www.haomeiwen.com/subject/cfwwsxtx.html