新的一年开始了
代码练习也要开始了
目录
1. 万能的for循环
时间复杂度O(n^2)
代码如下:
class Solution {
public:
vector<int> twoSum(vector<int>& nums, int target) {
int a,b;
for(a=0;a<nums.size()-1;a++)
{
for(b=a+1;b<nums.size();b++){
if(nums[a]+nums[b]==target)
return{a,b};
else
continue;
}
}
return{a,b};
}
};
2. 进阶:时间复杂度小于O(n^2)
Leetcode提示用Hash,时间复杂度O(n)。
(还想到了用指针,不过想复习一下map,有没有大神用指针写的求分享。)
将数组中的值当作键值对中的key,将数组的角标当作value,遍历数组。
target-nums[a],查找数组中是否有这个差,这时数组的值是map的key,如果有,就找到key所对应的value,也就是数组的角标。
代码如下:
class Solution {
public:
vector<int> twoSum(vector<int>& nums, int target) {
map<int,int> TSum;//将数组的值作为key,角标作为value
vector<int> vec;//定义一个容器存放返回的角标
int a=0;
int b=0;
for(a=0;a<nums.size();a++){
if(TSum.find(target-nums[a])!=TSum.end()){
//数组中是否有target与nums[a]的差
b=TSum.find(target-nums[a])->second;
//second表示value,意思就是差在数组中的角标。
vec.push_back(b);
//差所对应的角标放进容器。
vec.push_back(a);
//此时数组的角标放进容器
}
TSum.insert({nums[a],a});
}
return vec;
}
};
3.知识点
(1)vector (一种顺序容器)
存放任意类型的动态数组。
push_back函数在vector的末尾插入一个数据。
(2)map(一种关联容器)
map中有一对Key,Value键值对。
迭代器find函数中的参数是key,find()->first是key的值,find()->second是value的值。
如果没有相应的key,就指向end()。
每天都要开开心心呀!