Study/Algorithm
LeetCode (C/C++) 137. Single Number II
hwooo
2024. 5. 1. 15:15
https://leetcode.com/problems/single-number-ii/
풀이
답지를 봤다.
떠오르는 풀이는 많았지만 시간, 공간복잡도의 제약조건이 있어 해당 방법들은 다 사용하지 못 했다.
비트 연산으로 각 자리수마다 해당 숫자가 등장하는 횟수를 확인, 이를 3으로 나눴을 때 값이 존재한다면 이는 3번 나온 수에 포함되지 않으므로 해당 자리수를 답에 더한다.
코드
class Solution {
public:
int singleNumber(vector<int>& nums) {
int ans = 0;
for (int i = 0; i < 32; i++) {
int cnt = 0;
for (int n : nums)
cnt += n >> i & 1;
cnt %= 3;
ans |= cnt << i;
}
return ans;
}
};