力扣经典150题第四十三题:两数之和

news/2024/9/23 5:17:57/

目录

      • 力扣经典150题第四十三题:两数之和
        • 题目描述
        • 示例
        • 解题思路
        • 完整代码
        • 复杂度分析
        • 总结与结语
        • 感谢您阅读本文,希望本文能帮助您更好地理解和掌握解决这道经典的算法问题!

力扣经典150题第四十三题:两数之和

题目描述

给定一个整数数组 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]

解题思路

一种简单的解决方案是使用哈希表(HashMap)来存储每个元素的值及其索引。我们遍历数组,对于每个元素 nums[i],计算目标值 complement = target - nums[i]。然后检查哈希表中是否存在 complement,如果存在则说明找到了答案,返回对应的索引。如果不存在,则将当前元素存入哈希表中。

完整代码
import java.util.HashMap;
import java.util.Map;public class TwoSum {public int[] twoSum(int[] nums, int target) {// 创建哈希表,用于存储元素值和对应的索引Map<Integer, Integer> map = new HashMap<>();// 遍历数组for (int i = 0; i < nums.length; i++) {int complement = target - nums[i];// 检查哈希表中是否存在 complementif (map.containsKey(complement)) {// 找到了满足条件的两个数,返回它们的索引return new int[] { map.get(complement), i };}// 将当前元素存入哈希表中,值作为 key,索引作为 valuemap.put(nums[i], i);}// 如果未找到符合条件的两个数,返回空数组return new int[] {};}public static void main(String[] args) {int[] nums1 = {2, 7, 11, 15};int target1 = 9;TwoSum solution = new TwoSum();int[] result1 = solution.twoSum(nums1, target1);System.out.println("示例 1 结果:" + Arrays.toString(result1));int[] nums2 = {3, 2, 4};int target2 = 6;int[] result2 = solution.twoSum(nums2, target2);System.out.println("示例 2 结果:" + Arrays.toString(result2));int[] nums3 = {3, 3};int target3 = 6;int[] result3 = solution.twoSum(nums3, target3);System.out.println("示例 3 结果:" + Arrays.toString(result3));}
}
复杂度分析
  • 时间复杂度:O(n),其中 n 是数组 nums 的长度。我们只需遍历一次数组,哈希表的插入和查找操作均为 O(1) 的时间复杂度。
  • 空间复杂度:O(n),其中 n 是数组 nums 的长度。哈希表最多存储 n 个元素。
总结与结语

本题利用哈希表的快速查找特性,通过一次遍历数组即可找到和为目标值的两个元素。这种解法的时间复杂度为 O(n),空间复杂度也为 O(n),是一种高效的解决方案。

哈希表的使用在解决数组和字符串相关的问题中具有广泛的应用,能够有效地降低时间复杂度。

通过掌握哈希表的基本原理和操作,能够更加高效地解决类似的算法问题,提高编程的技能和效率。

感谢您阅读本文,希望本文能帮助您更好地理解和掌握解决这道经典的算法问题!

http://www.ppmy.cn/news/1443754.html

相关文章

18.Nacos配置管理-微服务读取Nacos中的配置

需要解决的问题 1.实现配置更改热更新&#xff0c;而不是改动了配置文件还要去重启服务才能生效。 2.对多个微服务的配置文件统一集中管理。而不是需要对每个微服务逐一去修改配置文件&#xff0c;特别是公共通用的配置。 配置管理服务中的配置发生改变后&#xff0c;回去立…

阿斯达年代记三强争霸服务器没反应 安装中发生错误的解决方法

阿斯达年代记三强争霸服务器没反应 安装中发生错误的解决方法 最近刚上线的由影视剧改编的游戏《阿斯达年代记三强争霸》可谓是在游戏圈内引起了轩然大波&#xff0c;这是一款由网石集团与龙工作室联合开发的MMORPG游戏&#xff0c;游戏背景设定在一个名为阿斯大陆的区域&…

速盾:ddos高防ip原理

DDoS&#xff08;分布式拒绝服务攻击&#xff09;是一种常见的网络攻击方式&#xff0c;通过向目标服务器发送大量的请求&#xff0c;使其无法正常处理合法用户的请求&#xff0c;从而导致服务不可用。为了应对这种攻击&#xff0c;高防IP技术应运而生。 高防IP是一种专门为抵…

数据结构--删除单链表中的某一个节点(时间复杂度控制为O(1))

题目描述&#x1f357; 只给定单链表中某个结点p(并非最后一个结点&#xff0c;即p->next!NULL)指针&#xff0c;删除该结点 思路分析&#x1f357; 结点不重要&#xff0c;&#xff0c;重要的是数据 不删自己&#xff0c;删除后面的结点: 1.把后面结点数据复制到当前 2.…

js网络请求---fetch和XMLHttpRequest的用法

fetch 语法规则 let promise fetch(url, [options]) //url —— 字符串&#xff1a;要访问的 URL。 //options —— 对象&#xff1a;可选参数&#xff1a;method&#xff0c;header 等。 fetch函数返回一个promise&#xff0c;若存在网络问题&#xff0c;或网址不存在&…

linux文件夹映射到本地win系统

在Linux上安装和配置Samba服务器相对简单&#xff0c;以下是基本的步骤&#xff1a; 1. **安装Samba软件包**&#xff1a;使用你的Linux发行版的包管理器来安装Samba软件包。例如&#xff0c;在基于Debian的发行版&#xff08;如Ubuntu&#xff09;上&#xff0c;你可以使用以…

spring boot 将配置文件信息 赋值到类注解

如何将application.properties中的值赋值给一个类注解呢 先看两个类 application.properties server.port8080 flow.namemyFlow flow.age20Component Documented Target({ElementType.TYPE}) Retention(RetentionPolicy.RUNTIME) public interface UserInfo {String name() d…

C++ //练习 13.54 如果我们为HasPtr定义了移动赋值运算符,但未改变拷贝并交换运算符,会发生什么?编写代码验证你的答案。

C Primer&#xff08;第5版&#xff09; 练习 13.54 练习 13.54 如果我们为HasPtr定义了移动赋值运算符&#xff0c;但未改变拷贝并交换运算符&#xff0c;会发生什么&#xff1f;编写代码验证你的答案。 环境&#xff1a;Linux Ubuntu&#xff08;云服务器&#xff09; 工具…