• leetcode每日刷题计划--day55


    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了

    时间才能证明一切,选好了就尽力去做吧!
  • 相关阅读:
    MFC通过ODBC连接Mysql程序
    MFC下DLL编程(图解)
    INI文件的写入与读取
    如何在MFC中启动其它的(.exe)可执行文件
    [VC++]用CTime类得到当前日期、时间、星期,格式化(详细讲解)
    OutputDebugString输出调试信息到debugtrack
    MFC添加背景图片三种方法
    在MFC对话框中添加状态栏
    MFC 窗体背景图片设置
    MFC实现为窗体添加的背景图片
  • 原文地址:https://www.cnblogs.com/tingxilin/p/11883019.html
Copyright © 2020-2023  润新知