每日一道算法题001 两数之和

228 阅读1分钟

题目

给定一个整数数组 nums 和一个目标值 target,请你在该数组中找出和为目标值的那 两个 整数,并返回他们的数组下标。
你可以假设每种输入只会对应一个答案。但是,数组中同一个元素不能使用两遍。
示例:
给定 nums = [2, 7, 11, 15], target = 9
因为 nums[0] + nums[1] = 2 + 7 = 9
所以返回 [0, 1]

关联主题:数组、哈希表

做题时间

class Solution {
    public int[] twoSum(int[] nums, int target) {
        
        
        
        
    }
}

以上给出方法输入参数,完成作答。

题目分析

1、给定一个整数数组和一个目标值,从数组中找到两个数和为目标值
2、数组中同一元素只能使用一次
3、分析可得需要记录数组中的值及其下标,在每次数组取值时进行求和运算

解答分析

本文只分析本人做题思路,仅供参考,了解一种解题思想,其他各种做题思路请上网查阅。

解答成功:
执行耗时:0 ms,击败了100.00% 的Java用户
内存消耗:38.3 MB,击败了95.79% 的Java用户

class Solution {
    public int[] twoSum(int[] nums, int target) {
        //创建一个 Map 用于存储元素及其下标
        Map<Integer, Integer> map = new HashMap<>();
        for (int i = 0; i < nums.length; i++) {
            //循环元素
            int m = nums[i];
            int n = target - m;
            if (map.get(n) != null) {
                //若两元素和为目标值,则返回对应下标
                return new int[]{ map.get(n),i};
            } else {
                //否则将元素及其下表存入 Map
                map.put(m, i);
            }
        }
        return new int[]{};
    }
}