Num 1
好久没有做题了qwq
先把旧的题有优化算法的看一下
新的 stl map 简单总结
暴力(二重循环)最开始的算法
(ps map的搜索是红黑树,肯定比线性走一遍快的)
优化 把所有的数对应的存在map里面(map[元素]=下标) 然后寻找map.count(target-now)
那么这种情况下,map本身的速度快整体变快。
二重优化 在实际过程中,我们发现,并不需要全遍历,如果每一个元素只考虑他们前面的元素,那么后面的元素早晚会考虑到他,这样不会漏掉结果
因此我们可以边查边存,在当前元素查找结束以后将其放入map即可
class Solution { public: vector<int> twoSum(vector<int>& nums, int target) { vector<int>vt; map<int,int>mp; //mp[nums[0]]=0; for(int i=0;i<nums.size();i++) { int a=target-nums[i]; if(mp.count(a)) { vt.push_back(mp[a]); vt.push_back(i); return vt; } mp[nums[i]]=i; } return vt; } };
注意一下写的时候出现了奇怪的报错现象,这个是map<int,int>mp 后面都用mp,手误写成map[nums[i]],出来的报错结果不太容易发现。。。
map['a']=1 a是key
map.count(key) 查找key出现的次数 ,(因为map set里面不允许重复,所以如果为1就是存在)
map.find(key) 这个返回的位置 用迭代器it=map.find(x),如果没出现过,返回为map.end()
map有新的键值对直接 mp['a']=1就行了,另外相同key会覆盖。(如果再写mp['a']=2) 以后查就变成2了