我在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] 来执行 ++,就会导致内存泄漏。 我错了吗?
std::map<int,int> m; std::cout << m[5] << std::endl;
输出0,此时map已有1个条目。 - BitTickler