您的位置:首页 > 其它

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的结果:

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: