Letv.com你们能连上吗?# PDA - 掌中宝
u*o
1 楼
就是一个ARRAY,所有的元素都出现了三次,只有一个出现了一次。找出这个一次的元
素。
SPACE(O(1)), TIME (O(N))的解法是这个用bit operator的。答案是在CAREERCUP里找
到的。。
int ones = 0;
int twos = 0;
int not_threes, x;
for (int i=0; i x = A[i];
twos |= ones & x; ************
ones ^= x;
not_threes = ~(ones & twos);
ones &= not_threes;
twos &= not_threes;
}
这个题的原理是这样的,有两个集合分别盛出现过1次(ONES)和2次(TWOS)的元素(前
两行)如果
有出现了第三次的,就从ONES, TWOS把它踢出来(后三行)
我的问题就是那行被MARK星星的原理是什么,如果一个元素第二次出现,怎么就能把它
放进去了。。。
比如我ARRAY前4个是1,2,3,1的话
前三个loop走完,two里还应该是空的,ones里应该是0^1^2^3=0
好这时进去第四个元素,twos = twos |(0&1)=0啊,并没有把1放进去啊。。
我哪里走错了。。苦恼啊,大神们请指导!!
素。
SPACE(O(1)), TIME (O(N))的解法是这个用bit operator的。答案是在CAREERCUP里找
到的。。
int ones = 0;
int twos = 0;
int not_threes, x;
for (int i=0; i
twos |= ones & x; ************
ones ^= x;
not_threes = ~(ones & twos);
ones &= not_threes;
twos &= not_threes;
}
这个题的原理是这样的,有两个集合分别盛出现过1次(ONES)和2次(TWOS)的元素(前
两行)如果
有出现了第三次的,就从ONES, TWOS把它踢出来(后三行)
我的问题就是那行被MARK星星的原理是什么,如果一个元素第二次出现,怎么就能把它
放进去了。。。
比如我ARRAY前4个是1,2,3,1的话
前三个loop走完,two里还应该是空的,ones里应该是0^1^2^3=0
好这时进去第四个元素,twos = twos |(0&1)=0啊,并没有把1放进去啊。。
我哪里走错了。。苦恼啊,大神们请指导!!