当前位置: 首页 > article >正文

LeetCode-两数之和(001)

一.题目描述

给定一个整数数组 nums 和一个整数目标值 target,请你在该数组中找出 和为目标值 target  的那 两个 整数,并返回它们的数组下标。

你可以假设每种输入只会对应一个答案,并且你不能使用两次相同的元素。

你可以按任意顺序返回答案。

二.示例 

示例 1:

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

示例 2:

输入:nums = [3,2,4], target = 6
输出:[1,2]

示例 3:

输入:nums = [3,3], target = 6
输出:[0,1]

三.提示:

  • 2 <= nums.length <= 104
  • -109 <= nums[i] <= 109
  • -109 <= target <= 109
  • 只会存在一个有效答案

四.解法:

方法一:哈希表

我们可以使用一个哈希表 d 来存储每个元素及其对应的索引。

遍历数组 nums,对于当前元素 nums[i],我们首先判断 target−nums[i] 是否在哈希表 d 中,如果在 d 中,说明 target 值已经找到,返回 target−nums[i] 的索引和 i 即可。

时间复杂度 O(n),空间复杂度 O(n),其中 n 为数组 nums 的长度。

Java代码

class Solution {
    public int[] twoSum(int[] nums, int target) {
        // 创建一个哈希映射,用于存储数组元素的值和对应的索引
        Map<Integer, Integer> d = new HashMap<>();
        
        // 遍历数组
        for (int i = 0;; ++i) {
            // 获取当前索引 i 处的数组元素
            int x = nums[i];
            // 计算与 x 互补的值 y
            int y = target - x;
            
            // 检查哈希映射中是否存在键 y
            if (d.containsKey(y)) {
                // 如果存在,返回两个数的索引
                return new int[] {d.get(y), i};
            }
            
            // 将当前元素 x 及其索引 i 存入哈希映射
            d.put(x, i);
        }
    }
}

Kotlin代码

class Solution {
    fun twoSum(nums: IntArray, target: Int): IntArray {
        // 创建一个可变的哈希映射,用于存储数组元素的值和对应的索引
        val m = mutableMapOf<Int, Int>()
        
        // 使用 forEachIndexed 遍历数组,获取每个元素及其索引
        nums.forEachIndexed { i, x ->
            // 计算与 x 互补的值 y
            val y = target - x
            // 从哈希映射中获取 y 的索引 j
            val j = m.get(y)
            
            // 如果 j 不为 null,说明找到了两个数
            if (j != null) {
                // 返回两个数的索引
                return intArrayOf(j, i)
            }
            
            // 将当前元素 x 及其索引 i 存入哈希映射
            m[x] = i
        }
        
        // 如果没有找到,返回一个空的数组
        return intArrayOf()
    }
}

🌟 关注我的CSDN博客,收获更多技术干货! 🌟


http://www.kler.cn/a/455458.html

相关文章:

  • python学opencv|读取图像(二十一)使用cv2.circle()绘制圆形进阶
  • IPsec VPN配置实验(固定地址)
  • 【Rust自学】7.2. 路径(Path)Pt.1:相对路径、绝对路径与pub关键字
  • C++:单例模式
  • 决策树python实现代码1
  • 『大模型笔记』评估大型语言模型的指标:ELO评分,BLEU,困惑度和交叉熵介绍以及举例解释
  • mysql索引的理解
  • LLM预训练recipe — 摘要版
  • 【视频】将yuv420p的一帧数据写入文件
  • ESP8266与阿里云物联网平台连接
  • 电商会员门店消费数据分析
  • 自定义 Element Plus 树状表格图标
  • “declarative data-parallel operators“与“MapReduce”
  • 【网络分析工具】WireShark的使用(超详细)
  • 华为IoTDA 智慧路灯设备SDK与平台通信C 流程bug解决
  • Android Java 版本的 MSAA OpenGL ES 多重采样
  • AndroidStudio Ladybug中编译完成apk之后定制名字kts复制到指定目录
  • SpringCloudAlibaba升级手册-nacos问题记录
  • C# Winform简单的俄罗斯方块小游戏源码2
  • 深入理解Composer自动加载机制
  • Linux服务器pm2 运行chatgpt-on-wechat,搭建微信群ai机器人
  • 云图库平台(三)——后端用户模块开发
  • 查看php已安装扩展命令
  • 《CS2》报错dxgi.dll缺失怎么办?《CS2》游戏提示dxgi.dll缺失要怎么解决?
  • SpringBoot3——核心原理
  • 基于STM32的智能温湿度监控与自动调节系统设计