λ¬Έμ νμ
ν¬κΈ°κ° n
μΈ λ°°μ΄ nums
κ° μ£Όμ΄μ§λ€.
n/2
λ³΄λ€ λ§μ΄ λ±μ₯νλ μλ₯Ό λ°νν΄μΌνλ€.
νμ΄
1οΈβ£ ν΄μ νμ©
λ°λ‘ κ°λ¨νκ² λ μ€λ₯Έ νμ΄μ΄λ€.
λ¨Όμ , λ°°μ΄μ μννλ©΄μ μμλ₯Ό key κ°μΌλ‘ μμκ° λνλ νμλ₯Ό value κ°μΌλ‘ mapμ κΈ°λ‘ν λ€,
mapμ νλ² λ μννλ©΄μ, λνλ νμκ° n/2 λ³΄λ€ ν° κ²½μ° λ°ννλ λ°©μμ΄λ€.
import java.util.*;
class Solution {
public int majorityElement(int[] nums) {
int n = nums.length;
int result = nums[0];
HashMap<Integer, Integer> map = new HashMap<>();
for (int num : nums) {
map.put(num, map.getOrDefault(num, 0) + 1);
}
for (Integer key : map.keySet()) {
if (map.get(key) > n / 2) {
result = key;
break;
}
}
return result;
}
}
κ²°κ³Ό
μ΄ λ°©μμ, μκ° λ³΅μ‘λ O(N) κ·Έλ¦¬κ³ κ³΅κ° λ³΅μ‘λλ O(N) λ°©μμ΄ λλ€.
μ΄λ° λ¬Έμ₯μ΄ μμ΄μ, κ³΅κ° λ³΅μ‘λλ₯Ό O(1) λ΄λ‘ ν΄κ²°ν μ μλ λ°©λ²μ κ³ λ―Όν΄λ³΄μλ€.
2οΈβ£ O(1) κ³΅κ° λ³΅μ‘λ νμ΄
νΌμ ν΄λ΅μ κ³ λ―Όν΄λ³΄λ€κ°, λμ ν μμ΄λμ΄κ° λ μ€λ₯΄μ§ μμμ λ€λ₯Έ λ΅μ μ°Έκ³ ν΄λ³΄μλ€.
μμ΄λμ΄λ, μ°λ¦¬κ° ꡬν΄μΌνλ μλ n/2 λ³΄λ€ ν° νμλ‘ λ±μ₯νλ μμ΄λ€.
λ°λΌμ, λ°°μ΄μ μννλ©΄μ μμλ₯Ό μΉ΄μ΄ν νλλ°
λ€λ₯Έ μμκ° λμ€λ©΄ μΉ΄μ΄ν μ -1 ν΄μ€λ€.
μΉ΄μ΄ν κ°μ΄ 0μ΄ λλ©΄, μΉ΄μ΄ν νλ μμλ₯Ό κ΅μ²΄ν΄μ€λ€.
κ²°κ³Όμ μΌλ‘ μΉ΄μ΄ν νλ μμκ° λ΅μ΄ λλ€.
import java.util.*;
class Solution {
public int majorityElement(int[] nums) {
int num = nums[0];
int cnt = 0;
for (int i = 0; i < nums.length; i++) {
if (nums[i] == num) {
cnt++;
} else {
cnt--;
if (cnt == 0) {
num = nums[i];
cnt = 1;
}
}
}
return num;
}
}
μ΄ νμ΄λ, μ§κ΄μ μΌλ‘λ μ΄ν΄κ° λλλ° μνμ μΌλ‘ μ μ΄ν΄κ° λμ§ μμλ€.
λ°λΌμ κ²μν΄λ³΄λ, Boyer-Moore κ³Όλ°μ ν¬ν μκ³ λ¦¬μ¦μ΄λΌλ μ΄λ¦μΌλ‘ μκ³ λ¦¬μ¦μ΄ μ‘΄μ¬νλ€.
λ°°μ΄ λ΄μ μ λ°μ΄ λλ μμ ν΄λΉνλ μμκ° λ³΄μ₯μ΄ λλ©΄ μ¬μ©ν μ μλ μκ³ λ¦¬μ¦μ΄λΌκ³ νλ€.
κ²°κ³Ό
π νκ³
λ¬Έμ κ° λ무 κ°λ¨ν΄μ κΈλ°© λλΌ μ μμ μ€ μμλλ°,
κ³΅κ° λ³΅μ‘λλ₯Ό κ°μ νλ λ°©λ²μ λ μ¬λ¦¬λλΌ κ±°μ 1μκ° 30λΆμ λΆμ‘μλ€.
κ·Έλλ μ€λ κ³ λ―Όν΄λ³Έ λ§νΌ, κ°μ λ°©λ²μ΄ λ¨Έλ¦Ώμμ μ€λ«λμ λ¨μμμ κ² κ°λ€.
π‘ "κ³Όλ°μ μμμ λ±μ₯ νμκ° λλ¨Έμ§ μμλ€μ λ±μ₯ νμλ₯Ό μμμν€λ κ²½μ°"λ₯Ό μ΄μ©ν κ²
μ μμ΄λμ΄λ₯Ό λ¨Έλ¦Ώμμ λ£μ΄λλ©΄, λμ€μ μ½κ² λ μ¬λ¦΄ μ μμ κ² κ°λ€.