class Solution {
public:
/* O(n*n)解法
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;
}
}
}
}
*/
// O(n)解法
vector<int> twoSum(vector<int>& nums, int target) {
vector<int> ans;
unordered_map<int, int> map;
for(int i = 0; i < nums.size(); ++i){
map[nums[i]] = i;
}
for(int i = 0; i < nums.size(); ++i){
int temp = target - nums[i];
if(map.count(temp) && i != map[temp]){
ans.push_back(i);
ans.push_back(map[temp]);
return ans;
}
}
}
};
unordered_map 底层用Hash实现,插入及查找时间复杂度均为O(1)。
本文介绍了一种解决两数之和问题的高效算法。通过使用哈希表(unordered_map),将时间复杂度从O(n^2)降低到O(n),显著提高了查找效率。文章详细展示了算法的具体实现。
846

被折叠的 条评论
为什么被折叠?



