LeetCode 之 JavaScript 解答第169題 —— 求眾數 I(Majority Element)

不甘平凡的小鹿發表於2019-04-05

Time:2019/4/4
Title: Majority Element 1
Difficulty: easy
Author: 小鹿


題目:Majority Element 1

Given an array of size n, find the majority element. The majority element is the element that appears more than ⌊ n/2 ⌋times.

You may assume that the array is non-empty and the majority element always exist in the array.

Example 1:

Input: [3,2,3]
Output: 3
複製程式碼

Example 2:

Input: [2,2,1,1,1,2,2]
Output: 2
複製程式碼

solve:

▉ 演算法思路:摩爾投票演算法

題目的要求是讓我們求陣列中超過一半資料以上相同的元素且總是存在的。有這樣一個思路要和大家分享:

假如有這樣一種資料,陣列中的所存在的這個超過 n/2 以上的資料(眾數)肯定比與此眾數不相同的其他元素個數要多(n/2 以上)。我們可以這樣統計,用一個變數來計數,另一個變數記錄計數的該元素,遍歷整個陣列,如果遇到相同的 count 加 +1,不同的就 -1 ,最後所儲存的就是眾數,因為其他資料的個數比眾數個數要少嘛,這就是所謂的摩爾投票演算法

▉ 程式碼實現:
/**
 * @param {number[]} nums
 * @return {number}
 */
var majorityElement = function(nums) {
    //用來計數相同的資料
    let count = 0;
    //儲存當前的元素
    let majority = 0;
	//遍歷整個陣列
    for(let i = 0;i < nums.length; ++i){
        //如果 count 為 0 
        if(count === 0){
            //將當前資料為眾數
            majority = nums[i];
            count++;
        }else if(majority === nums[i]){
            //如果遍歷的當前資料與儲存的當前資料相同,計數+1
            count++;
        }else{
            //若不相同,計數 - 1
            count--;
        }
    }
     //假設相同的眾數呢?
    if(count === 0){
        return -1;
    }else{
        return majority;
    }
};
複製程式碼

歡迎關注我個人公眾號:「一個不甘平凡的碼農」,記錄了自己一路自學程式設計的故事。 LeetCode 其他題目解析,請關注我Github:github.com/luxiangqian…

相關文章