【LeetCode-陣列】查詢大多數元素

HiDhl發表於2019-06-01

題目來源於 LeetCode 上第 169 號(Majority Element)問題,題目難度為 Easy,AC率52.6%

題目地址:https://leetcode.com/problems/majority-element/

題目描述

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

給定一個陣列,陣列的長度為n,找出陣列中出現次數超過一半的元素

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
複製程式碼

題目解析

採用的是摩爾投票演算法,關於什麼是摩爾投票演算法,可以參考知乎這篇文章,戳這裡

  1. 定義兩個變數major和count,major 表示出現次數最多的元素,count表示暫時無法刪除的元素個數
  2. 假設陣列第一個數為出現次數最多的元素,major = nums[0],count=1
  3. 如果後面的數字相等 count+1,不相等 count-1
  4. 如果count為0,修改major為當前數,並重置 count=1

演算法效率如下:

【LeetCode-陣列】查詢大多數元素

程式碼實現

class Solution {
    public int majorityElement(int[] nums) {
        int major = nums[0];
        int count = 1;
        for (int i = 1; i < nums.length; i++) {
            if (count == 0) {
                count = 1;
                major = nums[i];
            } else if (major == nums[i]) {
                count++;
            } else {
                count--;
            }
        }
        return major;
    }
}
複製程式碼

相關文章

【LeetCode-棧】有效的括號

【LeetCode-連結串列】面試題-反轉連結串列

【LeetCode-二叉樹】二叉樹前序遍歷

【LeetCode-陣列】陣列式整數加法

相關文章