[Leetcode]1. Two Sum
来源:互联网 发布:ipad pro 记笔记 知乎 编辑:程序博客网 时间:2024/05/17 08:22
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:
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; }};
0 0
- LeetCode 1. Two Sum
- [LeetCode]1.Two Sum
- LeetCode 1.Two Sum
- LeetCode --- 1. Two Sum
- [Leetcode] 1. Two Sum
- leetcode---1.Two sum
- [Leetcode] 1. Two Sum
- LeetCode 1.Two Sum
- LeetCode 1.Two Sum
- LeetCode 1.Two Sum
- 【LeetCode]1.Two Sum
- LeetCode 1.Two Sum
- leetcode 1. Two Sum
- [leetcode] 1. Two Sum
- leetcode 1. Two Sum
- Leetcode- 1. Two Sum
- LeetCode-1.Two Sum
- Leetcode 1. Two Sum
- NegNews测试类
- 接口添加默认方法以及静态方法
- HDU2033 人见人爱A+B
- 最大堆、最小堆C++实现
- Fragment总结(一)基本使用
- [Leetcode]1. Two Sum
- C语言基础 printf括号内的内容太多了电脑屏幕装不下
- C#窗体截图保存的实现
- java 基础二
- android 线程池两篇文章 。后期添加自己见解
- java.io.FileNotFoundException: F:\jstorm (拒绝访问.)
- PLCameraStreamingKit
- html5+canvas实现图片的压缩上传
- Problem I