哈希/求和-两数求和
2024-04-09 21:40:07  阅读数 464

由于要教会家里的智障姐姐,所以要写得很基础。


image.png

题目LeetCode1
给定一个整数数组 nums 和一个整数目标值 target,请你在该数组中找出 和为目标值 target 的那 两个 整数,并返回它们的数组下标。只会存在一个有效答案。

示例:
输入:nums = [2,7,11,15], target = 9
输出:[0,1]
解释:因为 nums[0] + nums[1] == 9 ,返回 [0, 1] 。

解题思路

遍历数组 nums,i 为当前下标,每个值都判断 map 中是否存在 target-nums[i] 的 key 值,如果存在则找到了两个值,如果不存在则将当前的 (nums[i],i) 存入 map 中,继续遍历直到找到为止。
步骤 1 :定义一个数组 nums 存放需要计算的整数,定义一个 Map 集合存放遍历过的元素。


IMG_1766.jpg

步骤 2:遍历数组 nums,i=0,nums[0]=2,target=9,9-2=7


IMG_1768.jpg

步骤 3:继续遍历数组 nums,i=1,nums[1]=7,target=9,9-7=2
IMG_1769.jpg

编码

class Solution {
    // 方法入参为整数型的数组nums 和 整数 target
    public int[] twoSum(int[] nums, int target) {
        // 创建一个 HashMap 集合,key=数值nums[i],value=下标 i
        Map<Integer, Integer> map = new HashMap<>();
        // 遍历数组 nums
        for(int i = 0; i < nums.length; i++) {
            // 每个值都判断 map 中是否存在 target-nums[i] 的 key 值
            if(map.containsKey(target - nums[i])) {
                // 如果存在则表示找到了两个值,输出两个值的下标
                return new int[] {map.get(target-nums[i]), i};
            }
            // 如果不存在则将当前的 (nums[i],i) 存入 map 中,继续遍历直到找到为止
            map.put(nums[i], i);
        }
        return new int[0];
    }
}

使用到的 Java 基础知识

入门级 Java 程序

public class HelloWorld {
    // 主方法入口
    public static void main(String[] args) {
        System.out.println("Hello World"); // 输出 Hello World
    }
}

所有的 Java 程序由 public static void main(String[] args) 方法开始执行


image.png

对象和类

https://www.runoob.com/java/java-object-classes.html

方法(函数)

https://www.runoob.com/java/java-methods.html

实例变量

https://www.runoob.com/java/java-variable-types.html

数组

https://www.runoob.com/java/java-array.html

Map 集合

https://www.runoob.com/java/java-hashmap.html

for循环

https://www.runoob.com/java/java-loop.html

/**
1 执行初始化步骤,int i=0
2 执行布尔表达式,如果为 true,循环体被执行,即执行大括号里的代码System.out.println("Hello World")。如果为false,则循环终止 
3 循环体被执行完后,更新 i,i++ 等价于 i= i+1
*/
for(初始化; 布尔表达式; 更新) {
    //代码语句
}

for(int i=0; i<3; i++) {
   System.out.println("Hello World");
}