Two Numbers
来源:互联网 发布:maxwell仿真软件下载 编辑:程序博客网 时间:2024/06/05 18:12
leetcode第一题,题目还是比较简单的,在一个序列中找出两个数相加等于所给的目标数,而且题目很明确给出了肯定存在这样一对数字,且只有一组。
最朴素的想法:进行两边循环遍历。
class Solution {public: vector<int> twoSum(vector<int>& nums, int target) { vector<int> ans; for(int i = 0;i < nums.size();i++){ for (int 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; } };这样的复杂度为o(n2),实际测试用了700多ms,有没有更好地办法呢?
朴素的改进办法:第一遍循环是在遍历,第二遍循环是在做什么呢?很显然是在寻找能和第一个循环中的变量凑成目标数的数值,这个寻找就是可以做手脚的地方,可以不一个个的找,而是借助于hashmap来找,这里使用的是c++中的unordered_map,hashmap可以快速查找,因此可以迅速提高速度。
class Solution {public: vector<int> twoSum(vector<int>& nums, int target) { unordered_map<int, int> m; int i; for(i = 0; i < nums.size(); i++) { if(m.find(target-nums[i]) != m.end()) return {m[target-nums[i]], i}; m[nums[i]] = i; } return {m[target-nums[i]], i}; }};
这里的主要思路是,在外层循环中遍历整个数组,然后分别求一下能与之配对成目标数的“”补数“”,将这个“”补数“”作为键值,索引作为值存入hash,当继续遍历发现hash表中存在了“补数”,也就拿到了对应的索引。寻找方法用的是hashmap的find方法,如果找到它会返回一个迭代器,否则返回迭代器的end,如果该数与剩余数字都凑不成目标数,则把它加入索引对。
补一发python版本的,基本思路与c++的hashmap差不多,不过我使用的是字典,python中的字典貌似也是红黑树实现的,因此查询效率也很高。
class Solution(object): def twoSum(self, nums, target): """ :type nums: List[int] :type target: int :rtype: List[int] """ ans = [] hash = {} for index,num in enumerate(nums): other = target-num if num not in hash: hash[other] = index else: return [hash[num],index]
0 0
- Two Numbers
- Two Sum & Add Two Numbers
- 题Two--Add Two Numbers
- LeetCode: Add Two Numbers
- Add Two Numbers
- LeetCode: Add Two Numbers
- [LeetCode]Add Two Numbers
- LeetCode Add Two Numbers
- Leetcode: Add Two Numbers
- Add Two Numbers
- LeetCode : Add Two Numbers
- LeetCode Add Two Numbers
- [LeetCode] Add Two Numbers
- LeetCode4: Add Two Numbers
- Leetcode : Add Two Numbers
- Add Two Numbers
- 【leetcode】Add Two Numbers
- add two numbers
- 危险系数_纪中1391_floyd
- HTML5中进行SQL的操作
- Android 5.0之后启动Service 服务的方式
- iOS 去除JSON里的转义字符
- 最大公约数和最小公倍数
- Two Numbers
- 关于灰帽python一书中提到的debugger
- Android判断APP是否第一次启动
- 双边滤波器
- python logging模块 自定义输出
- 多个tomcat之间的session复制
- 在leangoo 里怎么设置工作量估算,添加附件,设置截止时间?
- ArcGIS RunTime Sdk +WPF 基础地图显示
- 8位有符号的取值范围是-128~+127