ltx_zero

  博客园  :: 首页  :: 新随笔  :: 联系 :: 订阅 订阅  :: 管理

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;
    }
};
View Code

注意一下写的时候出现了奇怪的报错现象,这个是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了

 

posted on 2019-11-18 16:28  ltx_zero  阅读(174)  评论(0编辑  收藏  举报