刷 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<int>& 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;
}
};
这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。
V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。
V2EX is a community of developers, designers and creative people.