keep learning, keep coding!
Problem - Majority Element
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.
翻譯蒟蒻
給定一個長度為 n 的整數陣列 nums,找出其中的主要元素(在陣列中出現次數超過一半以上的元素)。
Example 1:
1
2Input: nums = [3,2,3]
Output: 3Example 2:
1
2Input: nums = [2,2,1,1,1,2,2]
Output: 2
Solution - JavaScript
Solution 1:
(Runtime - 51ms)
1 | /** |
- Solution 1 使用
counter
來記錄每個不同的數字在數組中出現的次數。對於每個數字我都檢查counter
中是否已經存在該數字的計數,如果不存在,就初始化為 1,如果存在,就將計數增加。然後,檢查每個數字的計數是否超過了數組長度的一半,如果是,則返回該數字。
Solution 2:
(Runtime - 47ms)
1 | /** |
- Solution 2 使用一種算法,稱為 Boyer-Moore 投票算法。通過兩個變數,
score
和count
來計算。遍歷nums
陣列,對於每個數字,如果count
等於 0,就將score
設置為當前數字,然後增加count
。如果count
不等於 0,並且當前數字等於score
,則增加count
;如果不等於score
,則減少count
。最終,score
中存儲的數字就是主要元素。
Solution 1 使用物件來存儲計數,會需要更多的空間,並且要額外的迴圈遍歷。
Solution 2 使用更少的空間(只需要兩個變數),並且只需遍歷一次nums
,因此在某些情況下可能更高效。
Solution - Ruby
Solution 1:
(Runtime - 81ms)
1 | def majority_element(nums) |
Solution 2:
(Runtime - 61ms)
1 | def majority_element(nums) |