zoukankan      html  css  js  c++  java
  • 优先使用map(或者unordered_map)的find函数而非algorithm里的find函数

        今天写leetcode的 Two Sum这题一开始使用vector容器,然后使用algorithm里的find函数进行查找,如下:

       

    class Solution {
    public:
        vector<int> twoSum(vector<int>& nums, int target) {
              vector<int> res;
              for(int i=0;i<nums.size();i++)
              {
                    int left = target - nums[i];
                    auto dis=find(nums.begin(), nums.end(),left);
                    if(dis!= nums.end())
                    {
                        if(dis-nums.begin()==i)
                        dis= find(dis+1, nums.end(),left);
                        if(dis!= nums.end())
                        {
                             res.push_back(i);
                             res.push_back(dis-nums.begin());
                             break;
                        }
                    }
              }
              return res;        
        }
    };

    发现会时间超时。后来改成用unordered_map通过了

     1 class Solution {
     2 public:
     3     vector<int> twoSum(vector<int>& nums, int target) {
     4           unordered_map<int, int> mapping;
     5           vector<int> result;
     6           for(int i=0; i<nums.size();i++)
     7           {
     8               mapping[nums[i]]= i;
     9           }
    10           for(int i=0;i<nums.size();i++)
    11           {
    12               int gap= target-nums[i];
    13               if(mapping.find(gap) !=mapping.end() &&mapping[gap]>i)
    14               {
    15                   result.push_back(i);
    16                   result.push_back(mapping[gap]);
    17                   break;
    18               }
    19           }
    20           return result;
    21     }
    22 };

    通过比较这,发现差异在find的函数使用

    map底层是红黑树实现的,因此它的find函数时间复杂度:O(logn)

    unordered_map底层是哈希表,因此它的find函数时间复杂度:O(l)

    !!!!!!!注意map与unordered_map的区别!!!!

    而algorithm里的find函数是顺序查找,复杂度为O(n)

  • 相关阅读:
    hdu 1042 N!
    hdu 1002 A + B Problem II
    c++大数模板
    hdu 1004 Let the Balloon Rise
    hdu 4027 Can you answer these queries?
    poj 2823 Sliding Window
    hdu 3074 Multiply game
    hdu 1394 Minimum Inversion Number
    hdu 5199 Gunner
    九度oj 1521 二叉树的镜像
  • 原文地址:https://www.cnblogs.com/daocaorenblog/p/5685412.html
Copyright © 2011-2022 走看看