码迷,mamicode.com
首页 > 其他好文 > 详细

第一个leetcode题目: two sum

时间:2015-06-05 06:15:02      阅读:123      评论:0      收藏:0      [点我收藏+]

标签:

第一个leetcode,大概意思:在一个数组里,任意找两个数字,让它们的和等于一个给定目标值。要求:1、输出这两个数在数组的下标 2、保证第一个数的下标要小于第二个数的下标

      做这个题,还是有一点点欣慰的地方就是:读完题,就有思路,而且能顺利编出来。(虽然因为那个小小的 return b 修改了好几次)

public class Solution {
    public int[] twoSum(int[] nums, int target) {
        int[] b = new int[2];
        for(int i=0;i<nums.length;i++){
            for(int j=(i+1);j<nums.length;j++){
              if((nums[i]+nums[j])==target){
                   b[0]=i+1;
                   b[1]=j+1;
              }
                
            }
            
        }
       return b; 
    }
}

  不多说,直接上 Submission Details。。。。看到这运行时间,我也是醉了(也第一次看到了Java与众语言的差距。。。)

           技术分享

 不过在讨论版里学习了O(n)的方法:思路是先往map里面存一个numbers[0]的元素,判断target-numbers[0] 的结果存在于map中:如果不在,往map存numbers[1],判断target-numbers[1] 的结果是否存在于map中(此时target-numbers[1]的查找值只有numbers[0])。。。。依次类推,如果存在,则说明刚刚好遇到了结果,直接输出index1和(i+1),因为(i+1)总是要大于index1的~

      另外还要纠正原来的思维定式:map<key,value>中,总以为key是要为value服务的(value比key重要),其实不然,key和value处在同等地位!以后还需要勤思考啊~!

public int[] twoSum(int[] numbers, int target) {
        Map<Integer, Integer> map = new HashMap<Integer,Integer>();
        for(int i = 0; i < numbers.length; i++) {                           
            Integer index1 = map.get(target-numbers[i]);
            if (index1 != null) {                                //第一次进循环,可以从这里先看
                return new int[]{index1,i+1};
            }
            map.put(numbers[i], i+1);
        }
        return null;
}

  

第一个leetcode题目: two sum

标签:

原文地址:http://www.cnblogs.com/neversayno/p/4553494.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!