美文网首页
每日两道算法题 - 两数之和

每日两道算法题 - 两数之和

作者: 辉_ace | 来源:发表于2021-12-14 23:20 被阅读0次

    问题

    给定一个数组和一个目标值,获取相加之合为目标值的数组中两个元素的下标并输出。
    输入:nums = [2,7,11,15], target = 9
    输出:[0,1]

    思路

    1)通过哈希表记录数据,key为元素值,value为该元素在数组中的下标,以便于后续获取。
    2)遍历数组,判断目标值减去当前元素值是否为null。
    3)如果不为null,代表map中存在与当前元素值相加等于目标值的元素。,则返回当前元素下标 与 map中对应key的value值。
    4)如果不为null,代表map中不存在与当前元素值相加等于目标值的元素,则将当前元素值做为key,下标作为value,放入map中。

    实现

    public class TwoSum {
    
        public static void main(String[] args) {
    
            int[] nums = new int[]{2,7,11,15};
            int target = 9;
            int[] result = twoSum(nums,target);
            System.out.println(Arrays.toString(result));
        }
    
        private static int[] twoSum(int[] nums, int target) {
            /**
             * 定义一个map用于存放数据   key为元素值,value为元素下标
             * 遍历数组
             * 如果map.get(target-nums[i]) != null. 代表该值存在,则返回数组[nums[i],map.get(target-nums[i])]
             * 否则,将当前遍历得到的值放入map中
             */
            Map<Integer,Integer> map = new HashMap<>(16);
            for (int i=0;i<nums.length;i++){
                if (map.get(target-nums[i]) != null){
                    return new int[]{i,map.get(target-nums[i])};
                }
                map.put(nums[i],i);
            }
            return new int[]{0};
    
        }
    }
    
    image.png

    相关文章

      网友评论

          本文标题:每日两道算法题 - 两数之和

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