Two Sum -- LeetCode [数组类]

思路:思路很容易,这题一看就应该时间空间为O(n),所以只要过一遍数组。用哈希表维护数组的值作为key,用数组的index作为value。 遍历数组的时候,用HashMap来查看下是不是有target-numbers[i]这个值,有就可以输出了。遍历一遍找不到就输出空。

注意点:hashmap构建的时候应该是查完当前这个值没有的话就压入hashmap,这样是为了保证查的时候不会查到自身的这个值。如果数组后面有对应的value,等到遍历到那个值的时候自然会查到对应值。

误区:一开始想用夹逼的方法,后来发现返回的是index,如果排序会打乱顺序。用哈希表存这个index的话,到后面查询时,容易只查到第一个index,那样如果有重复的元素就不对了。

代码:

    public int[] twoSum(int[] numbers, int target) {
        int[] res = new int[2];
        if (numbers == null || numbers.length < 2 )
        return res;
        HashMap<Integer,Integer> map = new HashMap<Integer, Integer>();
        for (int i=0;i<numbers.length;i++){
            if (map.containsKey(target-numbers[i])){
                res[0] = map.get(target-numbers[i]);
                res[1] = i+1;
                return res;
            }
            map.put(numbers[i], i+1);
        }
        return res;
    }


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值