1、两数之和(哈希表)

 题目:

给定一个整数数组 nums 和一个目标值 target,请你在该数组中找出和为目标值的那 两个 整数,并返回他们的数组下标。

你可以假设每种输入只会对应一个答案。但是,数组中同一个元素不能使用两遍。

示例:

给定 nums = [2, 7, 11, 15], target = 9

因为 nums[0] + nums[1] = 2 + 7 = 9

所以返回 [0, 1]

方法:哈希表法

思路:哈希表是以空间换时间的方法,倘若使用暴力解法,则时间复杂度是O(n^2),转而用哈希表的话时间复杂度缩小到了O(n),遍历一次就完成了任务

import java.util.HashMap;
import java.util.Map;

public class Liangshuxiangjia {
    public int[] twoSum(int [] nums,int target){
        int [] res = new int[2];
        //如果数组为空,返回空数组
        if(nums == null || nums.length ==0){
            return res;
        }
        //新建哈希表
        Map<Integer,Integer> map  = new HashMap<>();
        //遍历数组,判断map中是否存在一个值等于target-num[i]
        //如果有,返回当前的元素的值,以及target-num[i]
        // 如果没有,将target-nums[i]的差值存入集合

        for (int i = 0; i <nums.length; i++) {
            int temp = target-nums[i];
            if(map.containsKey(temp)){
                res[1] = i;
                res[0] = map.get(temp);
            }
            map.put(nums[i],i);
        }
        return res;
    }

    public static void main(String[] args) {
        int[] nums = {2,5,6,7};
        Liangshuxiangjia liangshuxiangjia = new Liangshuxiangjia();
        int [] res = liangshuxiangjia.twoSum(nums,9);
        for (int x:res) {
            System.out.print(x+" ");
        }
    }
}

输出结果:

0 3

时间复杂度:O(n)

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值