LeetCode1:两数之和(数组-Map集合,查找表)

本文详细解析了经典的两数之和算法问题,旨在寻找数组中和为目标值的两个整数及其下标,通过使用查找表的方法,提高了算法效率,避免了传统双重循环的复杂度。

两数之和

1、给定一个整数数组 nums 和一个目标值 target,请你在该数组中找出和为目标值的那 两个 整数,并返回他们的数组下标。
2、你可以假设每种输入只会对应一个答案。但是,数组中同一个元素不能使用两遍。
3、数组不是有序的。
在这里插入图片描述

   /**
     *  两数之和:查找表:nums不是有序数组
     * @param nums
     * @param target
     * @return
     */
    public int[] twoSum(int[] nums, int target) {
        //并不是一次性把nums的元素全部遍历放进map中,而是遍历到某个值时查找target-nums[i]是否在map中,
        //如果存在直接返回,如果不存在,将该值放进去(key存放元素值,value存放元素的下标)
        //防止出现相同值覆盖的情况
        Map<Integer,Integer> record = new HashMap<>();
        for(int i =0; i<nums.length;i++){
            int rest = target - nums[i];
            if(record.containsKey(rest)){
                //存在,返回下标
                int[] res = {i,record.get(rest)};
                return res;
            }
            //不存在,覆盖也不必担心会覆盖掉可能的解
            record.put(nums[i],i);
        }
        throw new IllegalArgumentException("无解");
    }
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值