169. Majority Element

  • 첫번째 숫자λ₯Ό κΈ°μ€€μœΌλ‘œ 숫자의 개수(count)λ₯Ό μ„Όλ‹€.
  • 만일 λ‹€λ₯Έ μˆ«μžκ°€ λ‚˜μ˜€λ©΄ countλ₯Ό κ°μ†Œμ‹œν‚€κ³  countκ°€ 0이 되면 μƒˆλ‘œ μΆœν˜„ν•œ 숫자λ₯Ό κΈ°μ€€μœΌλ‘œ 개수λ₯Ό μ„Όλ‹€.
  • 과반 μˆ«μžλŠ” 항상 μ‘΄μž¬ν•œλ‹€κ³  κ°€μ •ν•œλ‹€λ©΄ 전체 arrayμ—μ„œ 과반 숫자의 μˆ˜κ°€ 절반 이상일 κ²ƒμ΄λ―€λ‘œ λκΉŒμ§€ μ„Έμ—ˆμ„ λ•Œ 과반 숫자의 count 값은 1 이상이 λœλ‹€.
    • 만일 과반 μˆ«μžκ°€ μ—†λŠ” 경우라면 이 μ•Œκ³ λ¦¬μ¦˜μ€ μ„±λ¦½ν•˜μ§€ μ•ŠλŠ”λ‹€ (예: μ–΄λ–€ 두 μˆ«μžκ°€ λ™λ“±ν•œ 개수만큼 μžˆλŠ” 경우).
class Solution { public: int majorityElement(vector<int>& nums) { int elem = nums[0]; int count = 1; for (int i = 1; i < nums.size(); ++i) { if (nums[i] != elem) --count; else ++count; if (count == 0) { elem = nums[i]; count = 1; } } return elem; } };