LeetCode 1. Two sum
2018-02-06 21:39
218 查看
题意:给一个数组,和一个目标值target。找出数组中的(有且仅有)两个数,和为target。返回这两个数的index。
solution 1: 用贪婪算法在O(n^2)的时间复杂度下可以简单的完成。
solution 2: 其实问题的关键在于给一个元素,找出数组中的另一个元素与之匹配。想要快速查找于是乎就想到用hash表。给出一个元素,target-元素 = 需要的元素,那么要用hash表快速寻找需要的元素应该将其数值设置为key以进行查找,返回index。初始hash表为空,每访问一个元素,如果没有hash到,则将其按照上述规则加入hash表。之所以没有一开始就建好而是一边访问一边建表的原因是:如果一开始就建好那么至少要访问所有的元素一遍(建表需要访问一遍),如果边访问边建表至多需要访问所有的元素一遍。
class Solution { public: vector<int> twoSum(vector<int>& nums, int target) { /* 1.贪婪 int i, j; vector<int> ret; //sort(nums.begin(), nums.end()); for ( i = 0; i < nums.size()-1; i++ ) { for ( j = i+1; j<nums.size(); j++ ) { if ( nums[i] + nums[j] == target ) { ret.push_back(i); ret.push_back(j); return ret; } } } return ret;*/ //2. hash表 key是数组的值,value是index。 unordered_map<int, int> hash; vector<int> ret; for ( int i = 0; i<nums.size(); i++ ) { int nums_to_find = target - nums[i]; if ( hash.find(nums_to_find) != hash.end() ) { ret.push_back(i); ret.push_back(hash[nums_to_find]); return ret; } hash[nums[i]] = i; } return ret; } };
hash解submission的结果:
相关文章推荐
- leetcode 560. Subarray Sum Equals K & leetcode 1. Two Sum
- leetcode 1. Two Sum
- Leetcode: Two Sum
- [LeetCode] Two Sum
- [leetcode NO.1] Two Sum (JAVA)
- 【闲来刷 leetcode】 Two Sum | leetcode OJ
- 【LeetCode】1.Two Sum
- LeetCode-1. Two Sum
- Two Sum (leetcode1)
- leetcode【1+167 Two Sum 系列】【python】
- leetcode Two Sum 解决思路
- LeetCode || Two Sum
- leetcode 1 -- Two Sum
- 【leetcode】Two Sum
- LeetCode_Two Sum
- LeetCode【第1题】Two Sum
- LeetCode 1 : Two Sum
- LeetCode-Two Sum
- leetcode做题体会 two sum
- Leetcode 1. Two Sum