169. 多数元素【数组】
排序
nums.sort().排序一遍,在遍历一遍找出大于n/2,这里就不写了
哈希
这里明显要是用哈希做面试官最喜欢。
错误解答
自己当时想试试用vector做一下,把nums的元素作为Mark的下标,出现一次Mark对应元素就加一次,结果是错误的,因为,nums里面有负值,而vector的下标全是正值。
class Solution {
public:
int majorityElement(vector<int>& nums) {
int count = int(nums.size());
if (count == 1)
cout<< nums[0];
vector<int> mark(100, 0);
for (int i = 0; i < count; i++)
{
mark[nums[i]]++;
}
for (int j = 0; j < mark.size(); j++)
{
if (mark[j] >int(count / 2) )
return j;
}
return 0;
}
};
正确解答
建立个哈希表,键保存nums的元素,值负责计数
扩展:map与unordered_map的区别
class Solution {
public:
int majorityElement(vector<int>& nums) {
int count=int(nums.size());
if(count==1)
return nums[0];
unordered_map <int,int> mark;
for(int i=0;i<count;i++)
{
++mark[nums[i]];
if(mark[nums[i]]>int(count/2))
return nums[i];
}
return -1;
}
};