LeetCode 1. 两数之和(哈希)
文章目录
- 1. 题目
- 2. 解题
- 1. 暴力解法
- 2. 哈希法
- 3. python3解答
1. 题目
题目链接:https://leetcode-cn.com/problems/two-sum/
给定一个整数数组 nums 和一个目标值 target,请你在该数组中找出和为目标值的那 两个 整数,并返回他们的数组下标。
你可以假设每种输入只会对应一个答案。但是,你不能重复利用这个数组中同样的元素。
给定 nums = [2, 7, 11, 15], target = 9因为 nums[0] + nums[1] = 2 + 7 = 9
所以返回 [0, 1]
2. 解题
1. 暴力解法
每个元素都跟后面的比较,n2 复杂度
class Solution
{public:vector<int> twoSum(vector<int>& nums, int target) {int i,j;vector<int> ans;for(i = 0; i < nums.size()-1; ++i){for(j = i+1; j < nums.size(); ++j){if(nums[i]+nums[j] == target){ans.push_back(i);ans.push_back(j);return ans;}}}return ans;}
};
2. 哈希法
利用unordered_map哈希查找,先建立哈希表O(n),再查找O(n)
//哈希法
class Solution
{public:vector<int> twoSum(vector<int>& nums, int target) {int i, d;vector<int> ans;unordered_map<int,int> unomap;//unordered_map是哈希表for(i = 0; i < nums.size(); ++i)//建立哈希表unomap[nums[i]] = i;//哈希数组下标是值,存的原来的下标for(i = 0; i < nums.size(); ++i){d = target - nums[i];if(unomap.find(d) != unomap.end() && unomap[d]>i){//如果查找到了,且不是同一个元素ans.push_back(i);ans.push_back(unomap[d]);break;}}return ans;}
};
- 优化,只需要一次遍历
class Solution { // 2020.10.3
public:vector<int> twoSum(vector<int>& nums, int target) {unordered_map<int,int> m;int number;for(int i = 0; i < nums.size(); ++i){number = target-nums[i];if(m.find(number) != m.end())return {i, m[number]};m[nums[i]] = i;}return {};}
};
3. python3解答
class Solution:def twoSum(self, nums: List[int], target: int) -> List[int]:dic = {}for i in range(len(nums)):dic[nums[i]] = ifor i in range(len(nums)):if (target-nums[i]) in dic and dic[target-nums[i]] > i:return [i,dic[target-nums[i]]]return [-1,-1]
我的CSDN博客地址 https://michael.blog.csdn.net/
长按或扫码关注我的公众号(Michael阿明),一起加油、一起学习进步!
LeetCode 1. 两数之和(哈希)相关推荐
- [leetcode]1.两数之和 + 哈希表:梦开始的地方,英语的abandon
方案一:暴力题解没什么可说的,当然不是面试官想看到的 复杂度分析 时间复杂度:O(N^2),其中 N是数组中的元素数量.最坏情况下数组中任意两个数都要被匹配一次.空间复杂度:O(1). 方案二:直白来 ...
- [leetcode]1.两数之和
[leetcode]1.两数之和 题目 给定一个整数数组 nums 和一个整数目标值 target,请你在该数组中找出 和为目标值 的那 两个 整数,并返回它们的数组下标. 你可以假设每种输入只会对应 ...
- LeetCode 1. 两数之和
LeetCode 1. 两数之和 给定一个整数数组 nums 和一个整数目标值 target,请你在该数组中找出 和为目标值 target 的那 两个 整数,并返回它们的数组下标. 你可以假设每种输入 ...
- [hashmap|空间换时间] leetcode 1 两数之和
[hashmap|空间换时间] leetcode 1 两数之和 1.题目 题目链接 给定一个整数数组 nums 和一个目标值 target,请你在该数组中找出和为目标值的那两个整数,并返回他们的数组下 ...
- C/C++描述 LeetCode 167. 两数之和 II - 输入有序数组
C/C++描述 LeetCode 167. 两数之和 II - 输入有序数组 大家好,我叫亓官劼(qí guān jié ),在CSDN中记录学习的点滴历程,时光荏苒,未来可期,加油~博主目前仅在 ...
- LeetCode 170. 两数之和 III - 数据结构设计(哈希map)
文章目录 1. 题目 2. 解题 1. 题目 设计并实现一个 TwoSum 的类,使该类需要支持 add 和 find 的操作. add 操作 - 对内部数据结构增加一个数. find 操作 - 寻找 ...
- LeetCode 1. 两数之和【哈希表】
1. 两数之和 给定一个整数数组 nums 和一个整数目标值 target,请你在该数组中找出 和为目标值 target 的那 两个 整数,并返回它们的数组下标. 你可以假设每种输入只会对应一个答案 ...
- 【前端来刷LeetCode】两数之和与两数相加
大部分玩前端的小伙伴,在算法上都相对要薄弱些,毕竟调样式.调兼容就够掉头发的了,哪还有多余的头发再去折腾. 确实在前端中需要使用到算法的地方是比较少,但若要往高级方向发展,算法的基本功就非常重要啦.对 ...
- 力扣(leetcode)-1. 两数之和
描述 给定一个整数数组 nums 和一个整数目标值 target,请你在该数组中找出 和为目标值 target 的那 两个 整数,并返回它们的数组下标. 你可以假设每种输入只会对应一个答案.但是,数组 ...
- LeetCode 01两数之和02两数相加
力扣 LeetCode01两数之和 LeetCode02两数之加 前言:第一次LeetCode打卡题解,前面组织的打卡活动从今天开始正式开始了,很多csdn和公众号小伙伴以及加入了,欢迎加入!详细看力 ...
最新文章
- 基于视角特征提取的3D检测方法汇总
- VS2015编译Boost1.64
- 一般入职体检都有哪些项目_单位常规体检一般都需要检查哪些项目?
- PHP文件上传【前后台编码】
- 手势模型和Angular Material的实现
- Demuxed:编解码器和压缩的未来
- [Silverlight]TextBlock控件全攻略
- leetcode 978. 最长湍流子数组(滑动窗口)
- Linux进程实践(5) --守护进程
- ICCV2021 2D和3D通用!新医疗影像自监督SOTA(代码已开源)
- zoj 2313 Chinese Girls' Amusement
- MYSQL - database 以及 table 的增删改查
- @babel/polyfill按需加载
- rv1126+imx307/335/415公板使用总结
- 业界最年轻的领军人物--久其总工程师欧阳曜
- ADB介绍—— 配置ADB环境变量
- Docker安装mysql:Error starting userland proxy: listen tcp4 0.0.0.0:3306: bind: address already in use
- RISC-V MCU低功耗场景的应用分析
- 一键修复wpcap.dll文件丢失或出错
- ES6 — ES11 新特性一篇通