我在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]来执行++。 我错了吗?
答案 0 :(得分:4)
std::map::operator[]
被定义为默认初始化给定键的值。从标准; [map.access]
:
T&安培; operator [](const key_type&amp; x);
1效果:如果地图中没有等效于x的键,则将value_type(x,T())插入到地图中。
对于int
,默认值为0
,因此不必再进行任何工作。