map <int,int> counter;计数器[NUMS [I]] ++;

时间:2016-02-25 03:45:12

标签: c++

我在leetcode上看到了这段代码,这是一个找到多数元素的问题。这是问题描述:

给定大小为n的数组,找到多数元素。多数元素是出现超过⌊n / 2⌋次的元素。

您可以假设该数组非空,并且多数元素始终存在于数组中。

有一个答案正在讨论这些代码:

class Solution
{
public:
    int majorityElement(vector<int>& nums) 
    {
        map<int, int> cnt;
        for(int i=0; i < nums.size(); i++)
            cnt[ nums[i] ]++;

        int n = nums.size();
        for(map<int, int>::iterator iter=cnt.begin(); iter!=cnt.end();iter++)
            if( iter->second > n/2 )
                return iter->first;
    }
};

所以我对这一行感到好奇:cnt [nums [i]] ++;

我不需要先初始化cnt [nums [i]] = 0吗? 我认为我需要先做它或者会有内存泄漏,因为没有现有值的关键nums [i]来执行++。 我错了吗?

1 个答案:

答案 0 :(得分:4)

如果没有这样的值,

std::map::operator[]被定义为默认初始化给定键的值。从标准; [map.access]

  

T&安培; operator [](const key_type&amp; x);

     

1效果:如果地图中没有等效于x的键,则将value_type(x,T())插入到地图中。

对于int,默认值为0,因此不必再进行任何工作。