两数之和
循环遍历很容易就写得出来
class Solution {
public:
vector<int> twoSum(vector<int>& nums, int target) {
int i,j;
for(i = 0; i < nums.size()-1; i++)
{
for(j = i+1; j < nums.size(); j++)
{
if(nums[i]+nums[j]==target) return {i,j};
}
}
return {i,j};
}
};
时间复杂度O(n^2)
空间复杂度O(1)
这里用unordered_map
做一下
class Solution {
public:
vector<int> twoSum(vector<int>& nums, int target) {
unordered_map<int, int> res;
for (int i = 0; i < nums.size(); ++i) {
auto it = res.find(target - nums[i]);
if (it != res.end()) {
return {it->second, i};
}
res[nums[i]] = i;
}
return {};
}
};
虽然没有全面了解无序容器unordered_map
,但也不难看出
unordered_map
定义一个迭代器,auto it = res.find(target - num[i])
- 迭代器
it
可以自动遍历unordered_map
,判断是否搜寻到目标值it !=res.end()
- 迭代器
it
有两个属性first
和second
,分别指向键和值,也就是定义无序容器时unordered_map<int, int> res;
第一个和第二个int