題目來源於 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
複製程式碼
題目解析
採用的是摩爾投票演算法,關於什麼是摩爾投票演算法,可以參考知乎這篇文章,戳這裡
- 定義兩個變數major和count,major 表示出現次數最多的元素,count表示暫時無法刪除的元素個數
- 假設陣列第一個數為出現次數最多的元素,major = nums[0],count=1
- 如果後面的數字相等 count+1,不相等 count-1
- 如果count為0,修改major為當前數,並重置 count=1
演算法效率如下:
程式碼實現
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;
}
}
複製程式碼