博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Two Sum leetcode
阅读量:6539 次
发布时间:2019-06-24

本文共 2189 字,大约阅读时间需要 7 分钟。

Given an array of integers, find two numbers such that they add up to a specific target number.

The function twoSum should return indices of the two numbers such that they add up to the target, where index1 must be less than index2. Please note that your returned answers (both index1 and index2) are not zero-based.

You may assume that each input would have exactly one solution.

Input: numbers={2, 7, 11, 15}, target=9

Output: index1=1, index2=2

 

 to see which companies asked this question

这个题目一开始我没有考虑到有重复元素的情况,这样直接用一个hashmap保存所有元素和其下标,然后遍历数组,查看hashmap中是否有键等于差值就可以了。

提交代码后发现还有重复元素,这着实非常伤脑筋。因为hashmap无法保存重复的键,而且我认为务必要保存所有元素的下标。

于是我开始拿hashmap开刀,试图弄出一个可以保存重复元素的map,我马上就想到了map<int, vector<int>>这个复杂的结构,vector<int>保存的是相同键值对应的所有下标,谁知从此我踏上了一条不归路。。。

构造好了这个复杂的结构后,依次遍历就可以了,代码是下边那一长串,算法和代码可以算作冗余繁杂的负面典型了,记录于此为戒。

 

看了leetcode上支持最高的答案后,拍案叫绝后又有些许疑惑

在这里慢慢分析一下

还是使用hashmap,不同于往常先构造map,然后查找的思路。

这里是一边查找,一边添加,而且顺序很重要,一定是先查找,后添加。

题目说明只存在一对解,所以我们没有必要保存所有重复元素,找到后直接返回就可以了

vector
twoSum(vector
&nums, int target){ unordered_map
hash; vector
ret; for (int i = 0; i < nums.size(); ++i) { int remain = target - nums[i]; if (hash.find(remain) != hash.end()) { ret.push_back(hash[remain] + 1); ret.push_back(i + 1); return ret; } hash[nums[i]] = i; } return ret;}

 

 

vector
twoSum(vector
& nums, int target) { int i = 0; vector
twoSums; map
> sumsMap; for (auto one : nums) { vector
group; auto iter = sumsMap.find(one); if (iter != sumsMap.end()) { group = iter->second; sumsMap.erase(iter); } group.push_back(i); sumsMap.insert(make_pair(one, group)); i++; } for (i = 0; i < nums.size() - 1; i++) { int valueI = nums.at(i); int remain = target - valueI; if (sumsMap.find(remain) != sumsMap.end()) { vector
vecj = sumsMap.at(remain); int len = vecj.size(); for (int j = 0; j < len; j++) { int index = vecj[j]; if (i != index) { twoSums.push_back(i + 1); twoSums.push_back(index + 1); return twoSums; } } } } return twoSums;}

 

转载于:https://www.cnblogs.com/sdlwlxf/p/5100408.html

你可能感兴趣的文章
openwrt 常用命令
查看>>
桌面虚拟化最佳实践篇2—PCOIP协议详解及优化
查看>>
微软能重拾辉煌还是就此沉寂?
查看>>
我的友情链接
查看>>
rndc reconfig
查看>>
阿里巴巴理想主义者-厉建宇的离职信
查看>>
InnoDB存储引擎下快速创建索引
查看>>
关于IBM服务器引导盘安装提示硬盘小于8G报错
查看>>
php.ini配置文件详解
查看>>
linux sort命令参数及用法详解---linux将文本文件内容加以排序命令
查看>>
win7+ubuntu虚拟机之安装vmware tools步骤
查看>>
利用shell和iptables实现自动拒绝恶意试探连接SSH服务
查看>>
访问控制
查看>>
linux下oracle静默安装---亲测可以安装
查看>>
2016年4月8日作业
查看>>
SSL *** 安全解决方案
查看>>
linux进程的管理
查看>>
C++关键字(static-register-atuo-extern-volatile-const)
查看>>
jmeter-参数化与断言实战
查看>>
ios培训 教你清理ios项目不用的图片
查看>>