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

问题

给定一个数组和一个目标值,获取相加之合为目标值的数组中两个元素的下标并输出。
输入: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
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

友情链接更多精彩内容