教学过程中,教练示范一次,学员跟做三次。该过程被混乱剪辑后,记录于数组 actions,其中 actions[i] 表示做出该动作的人员编号。请返回教练的编号。

示例 1:

**输入:**actions = [5, 7, 5, 5]
**输出:**7

示例 2:

**输入:**actions = [12, 1, 6, 12, 6, 12, 6]
**输出:**1

提示:

1 <= actions.length <= 10000

1 <= actions[i] < 2^31

我们还是考虑二进制表示

对于出现三次的数,他每个一出现的位置一定会出现3次,

也就是说如果我们统计所有数二进制32位上1出现的次数

如果是3次则说明单独那个数此位置为0

如果是其他情况说明单独那个数此位置为1

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
class Solution {
public:
int trainingPlan(vector<int> &actions) {
vector<int> nums(33, 0);
for (int i : actions) {
int bit = 1;
for (int j = 0; j < 32; j++) {
nums[j] += (i & bit) == bit;
bit <<= 1;
}
}

int ans = 0;
for (int i = 31; i >= 0; i--) {
ans <<= 1;
ans += nums[i] % 3;
}
return ans;
}
};