• leetcode 入门第一题 4ms? 8ms? Two Sum


    今天开启leetcode

    入门第一题 

    题意很简单,就是一个数组中求取两数之和等于目标数的一对儿下标

    1.暴力 n^2

    两个for循环遍历

    用时0.1s 开外

    代码就不用写了

    2.二分 nlogn

    我们可以遍历选择每一个元素 ,然后二分剩余(target - ai)

    (一)从全序列二分剩余

    这就需要考虑下标和自己重叠的情况,比如【3,3】,target:6

    于是我们就需要判重叠

    代码就长成下面这样了(8ms)

    class Solution {
    public:
        vector<int> twoSum(vector<int>& nums, int target) {
            multimap<int, int> P;
            for (int i = 0; i < nums.size(); ++i)
                P.insert(pair<int, int>(nums[i], i));
            for (auto i : P)
            {
                map<int, int>::iterator j = P.find(target - i.first);
    
                if (j != P.end() && i.first + j->first == target)
                {
                    if (i.second == j->second)
                    {
                        ++j;
                        if (i.first + j->first != target)continue;
                    }
                    vector<int> V;
                    V.push_back(i.second);
                    V.push_back(j->second);
                    return V;
                }
            }
        }
    };

    因为后面四行用于return的代码太长了,看着不舒服,于是改成了

    int a[2]{i.second,j->second};
    return vector<int>(a,a+2);

    额外加时了4ms。。还是算了=.=

     

    (二)从当前位置之前二分剩余

    接着看了下这道题的提交情况,发现竟然有4ms过的,(当然也有0ms的,非正常人,这个可以忽略)

    官方代码:

    结果跑了8ms,可能是我脸黑,也可能数据增加了,或者,是个玄学测评机?

     

    可以看到这个代码就属于从头到尾一次插入,刚开始是空的,边找边插,找完之后再把当前位置插入序列,这样就可以避免找到自己本身

    咦~,这貌似是个好办法,学习了~

     

    到此,还不能说明方法(一)不好或者方法(一)略微复杂

    我们对于找答案佛系一点,或许就,见到了奇迹

     

    【3,3】target = 6,同样,第一次(3,0)会找到(3,0),我们可以跳过,(3,1)自然会找到(3,0)进行匹配,自动化随缘法

    另:leetcode可能不支持unordered_map或者unordered_multimap中的lower_bound和upper_bound,我也不清楚到底有没有,我只知道VS是有的。

    这篇单单是记录一下leetcode初体验,给出的样例题目当然非常简单了,欢迎大伙儿入坑~

    感谢您的阅读,生活愉快~

  • 相关阅读:
    windows下用python转换markdown到html
    windows下安装pip和easy_install
    Getting Real 摘记
    使iis支持asp.net扩展
    Linux IO模型
    kdissert:linux下的自由脑图软件
    debian下配置双核cpu
    内核:为了fan的健康,我的重新编译记录
    科研在每个人的生活中
    Donald Ervin Knuth:最年轻的图灵奖高德纳
  • 原文地址:https://www.cnblogs.com/lv-anchoret/p/9973591.html
Copyright © 2020-2023  润新知