leetcode 169. Majority Element
给定一个数组,其中一个数字出现的次数超过整个数组的一半,求这个数字。数组非空且必有解。
解法有二:
哈希:
map<int, int> m; int majorityElement(vector<int>& nums) { int ret; int ret_time = 0; for (auto i : nums) { m[i]++; if (m[i] > ret_time) { ret_time = m[i]; ret = i; if (ret_time > nums.size() / 2) return i; } } return ret; }
把map改为unordered_map即为哈希,但更慢:-(,肯定是测试集里有数字比较大,坑。
摩尔投票算法:
int majorityElement(vector<int>& nums) { int now = 0, big = nums[0]; for (auto e : nums) { if (now == 0) big = e; if (e == big) now++; else now--; } return big; }
未完待续。。。
可参考:
【本文章出自博客园willaty,转载请注明作者出处,误差欢迎指出~】