求众数 II----JS

作者:喝七喜
链接:https://www.zhihu.com/question/49973163/answer/235921864
来源:知乎
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。

今天做室友发来一道这样的题,在LeetCode上搜了一下有了,自己写出来时间和空间都很没有效率,随,看题解啦,才知道摩尔投票,看懂了思想,看了别人的写法,转换成JS写法来,相当于是copy了,有点羞耻。。。可是感觉已经很简洁了。上面是原文链接

说明: 要求算法的时间复杂度为 O(n),空间复杂度为 O(1)。
给定一个大小为 n 的数组,找出其中所有出现超过 ⌊ n/3 ⌋ 次的元素。

示例 1:

输入: [3,2,3]
输出: [3]
示例 2:

输入: [1,1,1,3,3,2,2,2]
输出: [1,2]

来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/majority-element-ii
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。
var majorityElement = function(nums) {
     
    let arr = []
    let n = parseInt(nums.length/3)+1
    let num1 = null;
    let num2 = null;
    let count1 = 0;
    let count2 = 0;
    let i = 0
    while(i < nums.length) {
     
        if (num1 === nums[i]) {
     
            count1++
        } else if (num2 === nums[i]) {
     
            count2++
        } else if (count1 === 0) {
     
            count1++
            num1 = nums[i]
        } else if (count2 === 0) {
     
            count2++
            num2 = nums[i]
        } else {
     
            count1--
            count2--
        }
        i++
    }
    count1 = 0
    count2 = 0
    for(let i = 0; i < nums.length; i++) {
     
        if (num1 === nums[i]) {
     
            count1++
        } else if (num2 === nums[i]) {
     
            count2++
        }
    }
    if (count1 >= n) {
     
        arr.push(num1)
    }
    if (count2 >= n) {
     
        arr.push(num2)
    }
    return Array.from(new Set(arr))
};

羡慕。。。。。。加油(破音)!!!

你可能感兴趣的:(leetcode)