Leetcode 169. 多数元素
思路
其实参考了力扣上面小伙伴的解题思路,选取了哈希表的思路:遍历整个数组,把每个元素放进哈希表里(凡是相同的元素都放进同一个“桶”里),选出数量比n/2大的就是多数元素了。
代码
int majorityElement(vector<int>& nums) {
unordered_map<int, int> myMap;
for (int n : nums) { //相当于foreach
myMap[n]++; //将数组的每个元素放进map里,重复的元素加一
if (myMap[n] > nums.size() / 2) { //如果某个元素的数量大于数组长度的一半,即为多数元素
return n;
}
}
}
ps.这段代码在vs编译器能通过,但提交到力扣上面就出现了
error: control may reach end of non-void function [-Werror,-Wreturn-type]的错误。
查了一下,应该是编译器规则不一样,后来把return放到最后就可以了。
总结
-
unordered_map是c++的哈希表,详细用法见:https://blog.csdn.net/fcku_88/article/details/88353431
-
for (int n : nums)是一个foreach循环遍历,遍历nums数组中的值,把每个元素值赋给n,例如:nums={ 2,2,1,1,1,2,2 },那么n的值依次是:2 2 1 1 1 2 2