技术解析
刷 leetcode 时,遇到如下问题,使用 C++ 我之前认为如下两种写法应该是等价的,但实际上不是: 方法 1:
for(int i = 0;i < nums.size();i++)
{
sum += ((nums[i] >> i)&1);
}
方法二:
for(auto num:nums)
{
sum += ((num >> i)&1);
}
方法二符合预期,也能正确 AC,我开始写的是方法 1 (三刷之前收藏的 200 题),始终不能 AC,看了答案写成方法二就 ok 了,这到底是因为啥?运算符优先级?我加括号括起来还是不对. 完整代码:
class Solution {
public:
int singleNumber(vector& nums) {
int size = nums.size();
int抗投诉服务器 ans = 0;
for(int i = 0;i < 32;i++)
{
int sum = 0;
for(auto num:nums)
{
sum += ((num >> i)&1);
}
if(sum % 3)
ans |= (1 << i);
}
return ans;
}
};