解法一
思路:brute force,循环嵌套依次找出每个元素出现的次数;
时间复杂度:O(n^2)
解法二
思路:用map计数,找出出现次数>长度一半的元素
时间复杂度:O(n)
1 | // Runtime: 120 ms, faster than 5.64% of JavaScript online submissions for Majority Element. |
解法三
思路:先把数组排序,众数一定在中间的位置
时间复杂度:O(n*logn)
1 | // Runtime: 84 ms, faster than 10.46% of JavaScript online submissions for Majority Element. |
解法四
思路:分治。把数组一分为二,找出前半段的众数以及众数出现的次数(lm, lc),后半段的众数以及众数出现的次数(rm, rc)。如果lm==lc,则众数为lm;否则比较lc和rc,返回较大的对应lm/rm。
时间复杂度:O(logn+n)
1 | var majorityElement = function (nums, start = 0, end) { |
Test Cases:
1 | test("test1", () => { |