我的解决(暴力遍历):
class Solution {
public:
vector<int> twoSum(vector<int>& nums, int target) {
vector<int> res;
int k = nums.size();
for (int i = 0; i < k ; ++i) {
//if (nums.at(i)>target) continue;
for (int j = i+1; j < k; ++j) {
if (nums.at(i)+nums.at(j)==target) {
res.push_back(i);
res.push_back(j);
return res;
}
}
}
}
};总结:这个方法没什么技术含量,时间复杂度比较差
参考了LeetCode上的参考解答,使用一趟的哈希表,可以得到时间复杂度更好的结果:
class Solution {
public:
vector<int> twoSum(vector<int>& nums, int target) {
vector<int> res;
map<int,int> mymap;
int k = nums.size();
for (int i = 0; i < k ; ++i) {
int complement = target - nums[i];
if (mymap.find(complement)!=mymap.end()&&mymap.at(complement)!=i) {
res.push_back(i);
res.push_back(mymap[complement]);
return res;
}
mymap[nums[i]] = i;
}
}
};
本文介绍了求解数组中两个数相加等于特定目标值的问题。通过两种方法对比,展示了暴力遍历和哈希表查找的不同实现方式。前者简单直观但效率较低;后者通过构建哈希表提高查找速度,降低了时间复杂度。
520

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



