前言
這題目的邏輯是找出陣列中出現次數過半的元素,這裡有使用一層 for 迴圈遍歷整個陣列後,用 HashMap 來操作存儲查找,Map 時間可以視為常數時間,時間複雜度可以達到 O(n)
,這裡有 JAVA 和 Python 的寫法。
題目
Given an array nums of size n, return the majority element.
The majority element is the element that appears more than ⌊n / 2⌋ times. You may assume that the majority element always exists in the array.
給定一個陣列 nums 大小為 n,回傳這個出現多次的元素。
這個出現多次的元素,出現超過半數。你可以認為這個出現多次的元素總是在這個陣列裡。
題目連結:https://leetcode.com/problems/majority-element/
題目限制
n == nums.length
1 <= n <= 5 * 104
109 <= nums[i] <= 109
範例
1 | Input: nums = [3,2,3] |
1 | Input: nums = [2,2,1,1,1,2,2] |
思路&筆記
- 遍歷陣列裡所有的元素
- 把元素和次數存在 Map 裡 ( key:value )
- 當下已有的元素,把 key 的次數 ( value ) +1
- 把 Map 裡次數 (value) 大於陣列一半的 key 回傳
JAVA 實現
1 | class Solution { |
JAVA 進階實現
筆者還在學習中,參考了在討論區裡網友一致認同的超簡單解法。
1 | class Solution { |
Python 實現
使用了和 Java 一樣的邏輯執行,換成 Python 的寫法。
1 | class Solution(object): |
成績
Language | Runtime | Memory |
---|---|---|
Java | 20 ms | 48.5MB |
Python | 131 ms | 14.9MB |