
nums ๋ฐฐ์ด์์ ๋น๋์๊ฐ ๋์ ์ซ์ return ํ๊ธฐ
/**
* @param {number[]} nums
* @return {number}
*/
var majorityElement = function (nums) {
let map = new Map()
for (let i = 0; i < nums.length; i++) {
let getMap = map.get(nums[i])
if (!getMap) {
map.set(nums[i], 1)
continue;
}
map.set(nums[i], getMap + 1)
}
let maxKey = 0
let maxNum = 0
for (let [key, value] of map) {
if (value > maxNum) {
maxKey = key
maxNum = value
}
}
return maxKey
};
์๊ฐ๋ณต์ก๋ : O(n) // Map O(n) + for๋ฌธ O(n) + for๋ฌธ O(n)
๊ณต๊ฐ๋ณต์ก๋ : O(n) // Map O(n)


Follow-up! ๊ณต๊ฐ๋ณต์ก๋ O(1)๋ก ๋ง๋ค์ด๋ณด๊ธฐ
/**
* @param {number[]} nums
* @return {number}
*/
var majorityElement = function (nums) {
let majNum;
let count = 0;
for (let num of nums) {
if (count === 0) {
majNum = num
}
count += majNum === num ? 1 : -1
}
return majNum
};
์๊ฐ๋ณต์ก๋ : O(n)
๊ณต๊ฐ๋ณต์ก๋ : O(1)

Boyer-Moore ํฌํ ์๊ณ ๋ฆฌ์ฆ์ ํตํด ๊ณต๊ฐ๋ณต์ก๋๋ฅผ O(1)๋ก ์ค์ด๊ณ runtime์ 10ms ์ค์๋ค!
Boyer-Moore ํฌํ ์๊ณ ๋ฆฌ์ฆ์ด๋?
โก๏ธ ์์๋ค ์ค ์ ๋ฐ ์ด์ ํฌํจ๋ ์์๋ฅผ linear time, constant space๋ก ์ฐพ์ ์ ์๋ ์๊ณ ๋ฆฌ์ฆ. ๊ณผ๋ฐ์ ์ด์์ ์์๊ฐ ์กด์ฌํ๋ค๋ ๋ณด์ฅ์ด ๋ ๋, ๊ฒฐ๊ณผ๊ฐ์ ํญ์ ๊ณผ๋ฐ์์ ํด๋นํ๋ ์์๊ฐ ๋๋ค.
https://en.wikipedia.org/wiki/Boyer%E2%80%93Moore_majorityvote_algorithm
โ 1์ผ1์
1: ํ๋ค๋ค๋ฉฐ ์ธ๋ฉด์ ๋์๋ฌ๋ผ๋ ์นด๋ฆฌ๋
2: ์ข์ ์์์ด ์๋๋ฐ ๋ค์ผ๋ฌ ์ ๊น ๋์ฌ ์ ์๋๋ ์ด์ฌ์ฉ
๋น์ ์ ์ ํ์?