LeetCode 第1题:两数之和
LeetCode 第1题:两数之和
题目描述
给定一个整数数组 nums 和一个整数目标值 target,请你在该数组中找出 和为目标值 target 的那 两个 整数,并返回它们的数组下标。
你可以假设每种输入只会对应一个答案,并且你不能使用两次相同的元素。
你可以按任意顺序返回答案。
难度
简单
题目链接
https://leetcode.cn/problems/two-sum/
示例
示例 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
- 只会存在一个有效答案
解题思路
方法一:暴力枚举
最直观的方法是使用两层循环枚举所有可能的数字对。
- 时间复杂度:O(n²)
- 空间复杂度:O(1)
- 优点:代码简单直观,空间复杂度低
- 缺点:时间复杂度高,在数组较大时性能较差
具体步骤:
- 使用两层循环,外层循环 i 遍历数组的每个元素
- 内层循环 j 从 i+1 开始遍历,寻找和为 target 的另一个数
- 如果找到 nums[i] + nums[j] == target,返回下标 [i, j]
- 如果遍历完没找到,返回空数组
方法二:哈希表
使用哈希表可以将时间复杂度降到 O(n):
- 创建一个哈希表,用于存储每个数字和其下标
- 遍历数组,对于每个数字 num:
- 计算补数 (target - num)
- 如果补数在哈希表中,则找到答案
- 否则将当前数字和下标加入哈希表
- 时间复杂度:O(n)
- 空间复杂度:O(n)
- 优点:时间复杂度低,查找效率高
- 缺点:需要额外的空间存储哈希表
代码实现
C# 实现(暴力解法)
public class Solution {
public int[] TwoSum(int[] nums, int target) {
// 外层循环遍历每个元素
for (int i = 0; i < nums.Length; i++) {
// 内层循环从i+1开始,避免重复使用同一个元素
for (int j = i + 1; j < nums.Length; j++) {
// 如果找到两个数的和等于target
if (nums[i] + nums[j] == target) {
return new int[] { i, j };
}
}
}
// 如果没有找到符合条件的数对,返回空数组
return new int[0];
}
}
C# 实现(哈希表解法)
public class Solution {
public int[] TwoSum(int[] nums, int target) {
// 创建字典存储数字和对应的索引
Dictionary<int, int> map = new Dictionary<int, int>();
// 遍历数组
for (int i = 0; i < nums.Length; i++) {
// 计算当前数字需要的补数
int complement = target - nums[i];
// 如果字典中存在这个补数,说明找到了答案
if (map.ContainsKey(complement)) {
return new int[] { map[complement], i };
}
// 如果当前数字不在字典中,将其添加到字典
if (!map.ContainsKey(nums[i])) {
map.Add(nums[i], i);
}
}
// 如果没有找到符合条件的数对,返回空数组
return new int[0];
}
}
执行结果
暴力解法
- 执行用时:308 ms
- 内存消耗:42.8 MB
哈希表解法
- 执行用时:156 ms
- 内存消耗:43.5 MB
总结与反思
- 这是一道经典的入门题目,考察了基本的算法思维
- 暴力解法虽然直观,但效率较低
- 使用哈希表可以用空间换时间,提高效率
- 这道题告诉我们:
- 在处理查找问题时,哈希表往往是一个很好的选择
- 有时候可以通过增加空间复杂度来降低时间复杂度
- 在实际工程中,通常优先考虑时间复杂度,因为内存通常较为充足
相关题目
- LeetCode 第15题:三数之和
- LeetCode 第167题:两数之和 II - 输入有序数组
- LeetCode 第653题:两数之和 IV - 输入二叉搜索树
LeetCode 第1题:两数之和的更多相关文章
- leetcode每日一题——两数之和
题目: 两数之和 难度: 简单 描述: 给定一个整数数组和一个目标值,找出数组中和为目标值的两个数. 你可以假设每个输入只对应一种答案,且同样的元素不能被重复利用. 解法: class Solutio ...
- 【leetcode】 算法题 两数之和
问题 给定一个整数数组和一个目标值,找出数组中和为目标值的两个数. 你可以假设每个输入只对应一种答案,且同样的元素不能被重复利用. 示例: 给定 nums = [2, 7, 11, 1 ...
- leetcode刷题--两数之和(简单)
一.序言 第一次刷leetcode的题,之前从来没有刷题然后去面试的概念,直到临近秋招,或许是秋招结束的时候才有这个意识,原来面试是需要刷题的,面试问的问题都是千篇一律的,只要刷够了题就差不多了,当然 ...
- 【JavaScript】Leetcode每日一题-平方数之和
[JavaScript]Leetcode每日一题-平方数之和 [题目描述] 给定一个非负整数 c ,你要判断是否存在两个整数 a 和 b,使得 a2 + b2 = c . 示例1: 输入:c = 5 ...
- Leetcode:0002(两数之和)
LeetCode:0002(两数之和) 题目描述:给定两个非空链表来表示两个非负整数.位数按照逆序方式存储,它们的每个节点只存储单个数字.将两数相加返回一个新的链表.你可以假设除了数字 0 之外,这两 ...
- Leetcode(1)两数之和
Leetcode(1)两数之和 [题目表述]: 给定一个整数数组 nums 和一个目标值 target,请你在该数组中找出和为目标值的那 两个 整数,并返回他们的数组下标.你可以假设每种输入只会对应一 ...
- leetCode刷题 | 两数之和
两数之和: 给定一个整数数组 nums 和一个目标值 target,请你在该数组中找出和为目标值的那 两个 整数,并返回他们的数组下标. 你可以假设每种输入只会对应一个答案.但是,你不能重复利用这个数 ...
- [LeetCode] 1. Two Sum 两数之和
Part 1. 题目描述 (easy) Given an array of integers, return indices of the two numbers such that they add ...
- LeetCode Golang实现 1. 两数之和
1. 两数之和 给定一个整数数组 nums 和一个目标值 target,请你在该数组中找出和为目标值的那 两个 整数,并返回他们的数组下标. 你可以假设每种输入只会对应一个答案.但是,你不能重复利用这 ...
- Leetcode(一)两数之和
1.两数之和 题目要求: 给定一个整数数组 nums 和一个目标值 target,请你在该数组中找出和为目标值的那 两个整数,并返回他们的数组下标. 你可以假设每种输入只会对应一个答案.但是,你不能重 ...
随机推荐
- Vim基本使用指南
一般模式:移动光标的方法 h或 向左方向键(←)光标向左移动一个字符 j或 向下方向键(↓)光标向下移动一个字符 k或 向上方向键(↑)光标向上移动一个字符 l或 向右方向键(→)光标向右移动一个字符 ...
- 使用conditional 实现线程精准通讯
实现3个线程之间依次执行 比如有3个线程A,B,C ,需要按照顺序执行,ABC,ABC 依次执行. 这个使用可以使用 Lock 的 conditional来实现线程之间精准通讯. 点击查看代码 pac ...
- Trino 436 - 使用教程(亲测,详细)
第一章 Trino简介 1. Trino概述 Trino是一个分布式SQL查询引擎,旨在查询分布在一个或多个异构数据源上的大型数据集.如果使用的是数TB或数PB的数据,那么很可能使用的是与Hadoop ...
- git commit之后,如何撤销commit
git reset --soft HEAD^ 仅仅是撤回commit操作,您写的代码仍然保留. HEAD^的意思是上一个版本,也可以写成HEAD~1 如果你进行了2次commit,想都撤回,可以使用H ...
- 腾讯云对象存储 COS 荣获对象存储领导力奖!!!
亚太内容分发大会暨 CDN 峰会一直致力于推动 CDN 产业深度融合发展和市场普及,现已成为亚太地区影响力最大的内容分发网络盛会. 十年来,在以腾讯云.阿里云.网宿科技等亚太 CDN 产业联盟成员孜孜 ...
- 【Javaweb】【Maven】【Tomcat10】jsp访问正常,Servlet访问404
Development Tool:IDEA(Intellij IDEA) Tomcat-Version:10 JDK-version:17 情况描述 我使用Tomcat10运行项目,jsp正常访问,但 ...
- docker-compose安装mongo
创建目录 [root@localhost tools]# mkdir -p /root/tools/mongo/{data,conf,init} 创建初始化用户脚本 [root@localhost m ...
- zstd - 一种由Facebook使用的快速数据压缩算法
Zstandard (也被称为zstd )是一款免费的开源,快速实时数据压缩程序,具有更好的压缩比,由Facebook开发. 它是用C语言编写的无损压缩算法 (在Java中有一个重新实现) - 因此它 ...
- Qt编写地图综合应用52-加载离线地图
一.前言 离线地图的加载其实和在线地图的加载方法几乎一样,唯一的最大区别就是,之前可能一个js文件引入即可,现在需要多个本地的js文件引入,而且网上流传的js文件的版本比较旧,意味着现在新版的支持op ...
- An invitation to 3-d vision: from images to geometric models英文pdf下载
Ma Y, Soatto S, Košecká J, et al. An invitation to 3-d vision: from images to geometric models[M]. N ...