力扣地址简单:1. 两数之和

1.题解

class Solution {
    public int[] twoSum(int[] nums, int target) {
        Map<Integer,Integer> map = new HashMap<>();
        for(int i = 0; i<nums.length; i++){
            if(map.containsKey(target-nums[i])){
                return new int[]{map.get(target-nums[i]),i};
            }
            map.put(nums[i],i);
        }
        return new int[]{};
    }
}

2.机考代码

import java.util.HashMap;
import java.util.Map;
import java.util.Scanner;

//方法名必须是Main
public class Main {
	//加static
    public static int[] twoSum(int[] nums, int target) {

        Map<Integer,Integer> map = new HashMap<>();
        for(int i = 0; i<nums.length; i++){
            if(map.containsKey(target-nums[i])){
                return new int[]{map.get(target-nums[i]),i};
            }
            map.put(nums[i],i);
        }
        return new int[]{};
    }

    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        // 读取数组长度
        int n = sc.nextInt();
        int[] nums = new int[n];
        // 读取数组元素
        for (int i = 0; i < n; i++) {
            nums[i] = sc.nextInt();
        }
        // 读取目标值
        int target = sc.nextInt();
        // 调用方法
        int[] res = twoSum(nums, target);
        // 输出结果
        System.out.println("[" + res[0] + "," + res[1] + "]");
    }
}

3.知识点讲解

1.创建map集合
Map<Key类型, Value类型> 变量名 = new HashMap<>();

举例:

// 1. 整数 key + 整数 value(你现在用的)
Map<Integer, Integer> map = new HashMap<>();

// 2. 字符串 key + 列表 value(你那道题用的)
Map<String, List<String>> map = new HashMap<>();

// 3. 字符串 key + 整数值
Map<String, Integer> map = new HashMap<>();

// 4. 整数 key + 字符串 value
Map<Integer, String> map = new HashMap<>();
2.数组的length是属性,不用加()
for(int i = 0; i<nums.length; i++)

为什么不用加 ()?
因为:
数组的 length 是 属性,不是方法!

  • 属性:就是变量,直接写名字
  • 方法:才需要加 ()
  1. 数组 → 用 .length(无括号)
int[] nums = {1,2,3};
int len = nums.length; // 正确
  1. 字符串 String → 用 .length()(有括号)
String s = "hello";
int len = s.length(); // 正确
  1. 集合 List → 用 .size()(有括号)
List<Integer> list = new ArrayList<>();
int size = list.size();
3.map.containsKey (key)

检查 map 里面有没有包含你传入的这个 key

  • 有 → 返回 true
  • 没有 → 返回 false
4.return new int[]{a, b};

这是 Java 里 直接创建并返回一个数组 的写法,一步到位,不用单独定义变量。

  1. new int[]
    意思:创建一个 int 类型的数组和平时写 int[] arr = new int[2]; 是同一个逻辑。
  2. { 值1, 值2 }
    大括号里直接写数组里要放的元素,有几个就是多长的数组。
  3. 合起来
    new int[]{a, b}意思:创建一个长度为 2 的 int 数组,里面装 a 和 b 两个数。
  4. 前面加 return
    return new int[]{a, b};意思:直接把这个新建好的数组作为结果返回出去。
//普通写法
int[] res = new int[2];
res[0] = a;
res[1] = b;
return res;
5.map.get (key)

根据传入的 key,获取 map 中对应的 value

6.map.put(key, value)

往 Map 里存数据

7.Map 集合常用方法总结
一、核心常用方法(机试/工作必备)
  1. put(key, value)
    向 Map 中添加一组键值对,用于存储数据。

  2. get(key)
    根据指定的键,获取对应的数值。

  3. containsKey(key)
    判断 Map 中是否包含指定的键,返回布尔值。

  4. remove(key)
    根据键删除 Map 中对应的一组键值对。

  5. keySet()
    获取 Map 中所有的键,返回一个键的集合。

  6. values()
    获取 Map 中所有的值,返回一个值的集合。

二、高频使用方法(重点记忆)

最常用的四个方法:put、get、containsKey、keySet。
掌握这四个即可满足大部分算法题需求。

Logo

AtomGit 是由开放原子开源基金会联合 CSDN 等生态伙伴共同推出的新一代开源与人工智能协作平台。平台坚持“开放、中立、公益”的理念,把代码托管、模型共享、数据集托管、智能体开发体验和算力服务整合在一起,为开发者提供从开发、训练到部署的一站式体验。

更多推荐