【LeetCode面试150】——1两数之和

embedded/2024/11/23 7:52:40/

博客昵称:沈小农学编程

作者简介:一名在读硕士,定期更新相关算法面试,欢迎关注小弟!

PS:哈喽!各位CSDN的uu们,我是你的小弟沈小农,希望我的文章能帮助到你。欢迎大家在评论区唠嗑指正,觉得好的话别忘了一键三连哦!😘

题目难度:简单

默认优化目标:最小化时间复杂度。

Python默认为Python3。

目录

1 题目描述

2 题目解析

3 算法框架及程序实现

3.1 暴力求解

3.2 哈希表

参考文献


1 题目描述

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

  • 只会存在一个有效答案

2 题目解析

输入是一个整数数组nums,一个目标求和整数target。输出是一个整数数组ans,其元素代表的是nums对应的下角标。约束条件是nums[ans[i]]之和等于target。

3 算法框架及程序实现

两数之和等于target,我们转换思路,target减去其中的一个数就等于另一个数,这就把问题转换成了查找。查找最快的是用哈希表。

3.1 暴力求解

两次循环找nums[i]+nums[j]=target。

C++ 代码实现

class Solution {
public:vector<int> twoSum(vector<int>& nums, int target) {for(int i=0;i<nums.size();i++){for(int j=i+1;j<nums.size();j++){if(nums[i]+nums[j]==target){return {i,j};}}}return {};}
};

Python代码实现

python">class Solution:def twoSum(self, nums: List[int], target: int) -> List[int]:for i,num_i in enumerate(nums):for j in range(i+1,len(nums)):if(num_i+nums[j]==target):return [i,j]return []
 

3.2 哈希表

哈希表table的key为整数,value为其在nums种出现的位置。我们在哈希表中找target-nums[i]的整数,找到返回其对应的value,i。

C++ 代码实现

class Solution {
public:vector<int> twoSum(vector<int>& nums, int target) {unordered_map<int,int> table;for(int i=0;i<nums.size();i++){auto it=table.find(target-nums[i]);if(it!=table.end()){return {it->second,i};}table[nums[i]]=i;//哈希表填充}return {};}
};

Python代码实现

python">class Solution:def twoSum(self, nums: List[int], target: int) -> List[int]:table=dict();for i,num in enumerate(nums):if target-num in table:return [table[target-num],i]table[nums[i]]=ireturn []

参考文献

力扣面试经典150题

力扣官方题解


http://www.ppmy.cn/embedded/139806.html

相关文章

十七:Web内容协商与资源表述

在现代Web架构中,随着用户设备、语言和网络环境的多样化,如何高效地传递和获取适合的内容变得尤为重要。Web内容协商(Content Negotiation)和资源表述(Representation of Resources)是解决这一问题的重要技术手段。它们帮助服务器根据客户端的需求动态提供最合适的资源,…

Cesium教程03_加载b3dm高度

使用 Vue3 和 Cesium 构建三维地球场景并实现高度调整功能 引言 在现代 Web GIS&#xff08;地理信息系统&#xff09;开发中&#xff0c;Cesium 是一款功能强大的三维地球可视化工具。本文展示了如何使用 Vue3 与 Cesium 集成&#xff0c;实现一个支持调整高度功能的三维地球…

力扣刷题--21.合并两个有序链表

I am the best &#xff01;&#xff01;&#xff01; 题目描述 将两个升序链表合并为一个新的 升序 链表并返回。新链表是通过拼接给定的两个链表的所有节点组成的。 示例 1&#xff1a; 输入&#xff1a;l1 [1,2,4], l2 [1,3,4] 输出&#xff1a;[1,1,2,3,4,4] 示例 2…

音频档案批量拷贝:专业SD拷贝机解决方案

批量音频档案拷贝最佳方案&#xff1a;解决播放错误与拷贝不完全问题 在现今数字化生产需求越来越高的时代&#xff0c;专业的拷贝机为大量数据复制提供了高效、安全的解决方案&#xff0c;特别是在批量拷贝音频档案至MicroSD卡并应用于播放器时&#xff0c;拷贝机具有无与伦比…

Python + 深度学习从 0 到 1(00 / 99)

希望对你有帮助呀&#xff01;&#xff01;&#x1f49c;&#x1f49c; 如有更好理解的思路&#xff0c;欢迎大家留言补充 ~ 一起加油叭 &#x1f4a6; 欢迎关注、订阅专栏 【深度学习从 0 到 1】谢谢你的支持&#xff01; ⭐ 什么是深度学习&#xff1f; 人工智能、机器学习与…

【Python TensorFlow】进阶指南(续篇三)

在前几篇文章中&#xff0c;我们探讨了TensorFlow的高级功能&#xff0c;包括模型优化、分布式训练、模型解释等多个方面。本文将进一步深入探讨一些更具体和实用的主题&#xff0c;如模型持续优化的具体方法、异步训练的实际应用、在线学习的实现细节、模型服务化的最佳实践、…

利用图像识别给CAD图纸找不同

文章目录 论文地址一、背景及意义介绍背景介绍意义介绍 二、概述三、论文思路具体步骤 四、方法介绍基于图像处理的CAD图纸比对算法的方法介绍 五、复现过程&#xff08;1&#xff09;CAD图纸转换为PDF&#xff08;2&#xff09;图纸边缘切割对齐&#xff08;3&#xff09;高斯…

Docker 容器化开发 应用

Docker 常用命令 存储 - 目录挂载 存储 卷映射 自定义网络 Docker Compose语法 Dockerfile - 制作镜像 镜像分层机制 完结