演算法:Majority Element(求眾數)
說明
演算法:Majority Element
LeetCode地址: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.
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
解題思路
題意是從陣列中找出出現次數最多的數,而且最多的數大於一半 ⌊ n/2 ⌋,步驟如下:
1. 如果陣列只有一個數直接返回第一個數,
2. 用HashMap儲存key為出現的數字,value為出現次數
3. 跟已經儲存的最大出現次數比較,如果大於,則儲存最大出現次數,和該數字。
4. 時間複雜度為O(n)
程式碼實現
import java.util.HashMap;
import java.util.Map;
public class MajorityElement {
public int majorityElement(int[] nums) {
if (nums.length == 1) {
return nums[0];
}
int majorityKey = 0;
int majorityCount = 0;
Map<Integer, Integer> numCountMap = new HashMap<>();
for (int num: nums) {
if (numCountMap.containsKey(num)) {
numCountMap.put(num, numCountMap.get(num) + 1);
if (numCountMap.get(num) > majorityCount) {
majorityCount = numCountMap.get(num);
majorityKey = num;
}
} else {
numCountMap.put(num, 1);
}
}
return majorityKey;
}
public static void main(String[] args) {
int[] inputNums = {2,2,1,1,1,2,2};
System.out.println("Output: " + new MajorityElement().majorityElement(inputNums));
}
}
結果輸出
Output: 2
程式碼執行效率
Runtime: 25 ms, faster than 19.42% of Java online submissions for Majority Element.
Memory Usage: 43.4 MB, less than 20.42% of Java online submissions for Majority Element.
總結
實為考察重複數字出現, 時間複雜度為O(n)。注意:儲存最大資料的時候,考慮只有一個數的情況,只有一個數就沒有比較,也就是初始資料。
程式碼下載:
https://github.com/zgpeace/awesome-java-leetcode/blob/master/code/LeetCode/src/MajorityElement.java
相關文章
- LeetCode 之 JavaScript 解答第169題 —— 求眾數 I(Majority Element)LeetCodeJavaScript
- 169 Majority element
- 演算法題:求眾數演算法
- 【演算法】求眾數-js解法演算法JS
- 優化的求眾數方法 - 摩爾投票演算法(演算法思想+求眾數的三種方法+摩爾投票演算法改進版求眾數 II)優化演算法
- LeetCode-Majority Element IILeetCode
- leetcode刷題--Majority ElementLeetCode
- 【演算法】已知必存在眾數,求該眾數 -- Boyer-Moore 投票演算法演算法
- 【演算法解題報告】求眾數演算法
- LeetCode 169. Majority ElementLeetCode
- 演算法面試題彙總_2求眾數演算法面試題
- 169. Majority Element--LeetCode RecordLeetCode
- 求眾數、排序演算法、二分法排序演算法
- 【leetcode】求眾數LeetCode
- 找眾數演算法演算法
- c++實現求眾數及其重數C++
- Leetcode刷題——求眾數LeetCode
- 【LeetCode從零單排】No.169 Majority Element(hashmap用法)LeetCodeHashMap
- 【LeetCode】求眾數(四種方法)LeetCode
- 求素數(質數)演算法演算法
- 【20190326】【每天一道演算法題】求眾數(分治演算法)演算法
- 分治演算法-眾數問題演算法
- 【演算法練習】(8)眾數演算法
- 演算法之絕對眾數演算法
- LeetCode169求眾數——分治LeetCode
- LeetCode每日一題:求眾數(No.169)LeetCode每日一題
- 分治法求眾數和重數(含檔案輸入輸出)
- 求取眾數及重數的演算法實現(Java)演算法Java
- java演算法 求最大公約數Java演算法
- Leetcode 169:求眾數(最詳細的解法!!!)LeetCode
- 求自然數的組合數的回溯演算法演算法
- 演算法設計--眾數和重數問題(分治法)演算法
- 每日一道演算法題--leetcode 169--求眾數--python--兩種方法演算法LeetCodePython
- Problem_2 Majority Problem
- 求最大公公約數(最大公因數)—— 歐幾里得演算法演算法
- [資料結構與演算法]15 兩行程式碼就可以搞定求眾數,但還有更巧的資料結構演算法行程
- (演算法)求1到1億間的質數或素數演算法
- LintCode-Majority Number