[Leetcode]1. Two Sum
2016-06-24 09:35
309 查看
Given an array of integers, return indices of the two numbers such that they add up to a specific target.
You may assume that each input would have exactly one solution.
Example:
这题是leetcode的第一题,我一开的想法是,定义两个迭代器iter1 = nums.begin(), iter2 = iter1 + 1; 然后for循环中嵌套for循环遍历vector,结果测试显示Time Limit Exceeded,时间超过了。开始的代码是这样的:
You may assume that each input would have exactly one solution.
Example:
Given nums = [2, 7, 11, 15], target = 9, Because nums[0] + nums[1] = 2 + 7 = 9, return [0, 1].
这题是leetcode的第一题,我一开的想法是,定义两个迭代器iter1 = nums.begin(), iter2 = iter1 + 1; 然后for循环中嵌套for循环遍历vector,结果测试显示Time Limit Exceeded,时间超过了。开始的代码是这样的:
class Solution { public: vector<int> twoSum(vector<int>& nums, int target) { vector<int> vec; for (auto iter1 = nums.begin(); iter1 != nums.end() - 1; ++iter1) for (auto iter2 = iter1 +1; iter2 != nums.end(); ++iter2) if (*iter1 + *iter2 == target) { vec.push_back(iter1 - nums.begin()); vec.push_back(iter2 - nums.begin()); } return vec; } };后来想了个办法,先排序,然后用两个迭代器向中间靠近,不过运行的时候Memory Limit Exceeded,这时代码如下:
class Solution { public: vector<int> twoSum(vector<int>& nums, int target) { vector<int> vec(nums); vector<int> index; sort(vec.begin(), vec.end()); auto iter1 = vec.begin(); auto iter2 = vec.rbegin(); while (*iter1 != *iter2) { if (*iter1 + *iter2 == target) { for (auto i = 0; i != nums.size(); ++i) { if (*iter1 == nums[i]) index.push_back(i); if (*iter2 == nums[i]) index.push_back(i); } } else if (*iter1 + *iter2 > target) ++iter2; else ++iter1; } return index; } };经过思考,想到了用<value, index>映射表,遍历nums,寻找target-nums[i],如果找到,则返回target-nums[i]的index,和当前的index;若没找到则将<nums[i], i>加入映射表,代码如下:
class Solution { public: vector<int> twoSum(vector<int>& nums, int target) { vector<int> vec; unordered_map<int, int> um; for(int i = 0; i < nums.size(); i ++) { if(um.find(target - nums[i]) == um.end()) um[nums[i]] = i; else { vec.push_back(um[target - nums[i]]); vec.push_back(i); } } return vec; } };
相关文章推荐
- 最简单的php验证码
- UML六大关系
- CodeIgniter框架大小写问题
- 属性动画 资源 (property Animation)简单学习
- PHP学习笔记
- 微信公众号判断用户是否已关注php代码解析
- 关于android studio底部的几个图标的作用
- Qt5实现串口通信
- ViewPagerIndicator
- 《HIVE编程指南》简图之第13章:函数
- Retrofit概述
- PowerDesigner 16.5
- SQL语句顺序
- PowerDesigner 16.5
- ubuntu 多任务启动
- Win加载exe
- codeforces 686B B. Little Robber Girl's Zoo(水题)
- Java 并发学习之ExecutorService
- 通过java程序实现scp上传和下载文件
- 解读ASP.NET 5 & MVC6系列教程(5):Configuration配置信息管理