由买买提看人间百态

boards

本页内容为未名空间相应帖子的节选和存档,一周内的贴子最多显示50字,超过一周显示500字 访问原贴
JobHunting版 - 请教一道google的面试题
相关主题
求教一道解法很巧妙的GOOGLE面试题上一道题给你们休息休息
一道面试题其实我很想知道, 多少软工能45分钟内把quicksort写下来
A家2面经。已经被句。。Google intern 面经,回馈版面
问一个G家面试题如何判断一个数是不是回文?
高通 面试题 疑问。。面试题里的bitwise operator
take a break, and try this small test (20 questions)请教一个面试题
这些找missing number的题是不是都不能用求和做?大家看看这几道亚麻面试题怎么做?
bloomberg 店面G面试题
相关话题的讨论汇总
话题: twos话题: ones话题: threes话题: 0010话题: pivot
进入JobHunting版参与讨论
1 (共1页)
s******e
发帖数: 108
1
数组中有1个数出现一次,其他数出现三次,怎么求出这个出现1次的数
求不用额外内存的O(n)的方法,谢谢
可以constant的内存
l*****a
发帖数: 14598
2
好歹用点内存把

【在 s******e 的大作中提到】
: 数组中有1个数出现一次,其他数出现三次,怎么求出这个出现1次的数
: 求不用额外内存的O(n)的方法,谢谢
: 可以constant的内存

d**e
发帖数: 6098
3
不用的话,是不是只能O(n^2)了?

【在 l*****a 的大作中提到】
: 好歹用点内存把
e*****e
发帖数: 1275
4
题目是不时错了?是两次而不是三次?
两次就XOR
l*****a
发帖数: 14598
5
3次用bitmap

【在 e*****e 的大作中提到】
: 题目是不时错了?是两次而不是三次?
: 两次就XOR

l***i
发帖数: 1309
6
How would you do this if you are allowed O(n) extra memory?
d**e
发帖数: 6098
7
hash is a simple one

【在 l***i 的大作中提到】
: How would you do this if you are allowed O(n) extra memory?
s******e
发帖数: 108
8
可以bitwise mode 3

【在 d**e 的大作中提到】
: 不用的话,是不是只能O(n^2)了?
s******e
发帖数: 108
9
one idea is to counting or summing number of the bit(0|1)
and then mod the counting number by 3
malleye (smalleye) 的大作中提到: 】
s*****y
发帖数: 897
10
You mean convert all the integer to binary.
Then add all the bit in each postion then mod 3?
for example:
1 0001
3 0011
3 0011
3 0011
2 0010
2 0010
2 0010
+
相关主题
take a break, and try this small test (20 questions)上一道题给你们休息休息
这些找missing number的题是不是都不能用求和做?其实我很想知道, 多少软工能45分钟内把quicksort写下来
bloomberg 店面Google intern 面经,回馈版面
进入JobHunting版参与讨论
s******e
发帖数: 108
11
exactly

【在 s*****y 的大作中提到】
: You mean convert all the integer to binary.
: Then add all the bit in each postion then mod 3?
: for example:
: 1 0001
: 3 0011
: 3 0011
: 3 0011
: 2 0010
: 2 0010
: 2 0010

s*****y
发帖数: 897
12
Did they interviewer require to write the code or just tell the idea at that
time?

【在 s******e 的大作中提到】
: exactly
s******e
发帖数: 108
13
do not know, get the question from careercup
刚刚想明白

that

【在 s*****y 的大作中提到】
: Did they interviewer require to write the code or just tell the idea at that
: time?

s*****y
发帖数: 897
14
今天刚在careerup看到的一个很牛的答案,但是看不懂思路,但是结果肯定是对的。
int main()
{
int B[] = {1,1,1,3,3,3,20,4,4,4};
int ones = 0 ;
int twos = 0 ;
int not_threes;
int x ;
for( i=0; i< 10; i++ )
{
x = B[i];
twos |= ones & x ;
ones ^= x ;
not_threes = ~(ones & twos) ;
ones &= not_threes ;
twos &= not_threes ;
}
printf("\n unique element = %d \n", ones );
return 0;
}
a****s
发帖数: 9
15
用quicksort 的idea, 找一个pivot, 然后partition, 扔掉有3n个elements 的
partition, 如果两个partition都有3n个elements, 那么pivot就是要找的element.
M*****e
发帖数: 568
16
这个变量名已经说得很明确了,
ones就是所有出现过一次的,所以每次更新用xor (注意后面去除了三次的)。
twos就是出现过两次的,更新的意思就是如果当前数b[i]在ones中存在, b[i]&ones,
就加到twos里面。
three就是一次和两次都出现过的,所以要从ones和twos中每次去除, & not_threes

【在 s*****y 的大作中提到】
: 今天刚在careerup看到的一个很牛的答案,但是看不懂思路,但是结果肯定是对的。
: int main()
: {
: int B[] = {1,1,1,3,3,3,20,4,4,4};
: int ones = 0 ;
: int twos = 0 ;
: int not_threes;
: int x ;
: for( i=0; i< 10; i++ )
: {

M*****e
发帖数: 568
17

复杂度上也是线性的,不过就没有上面位运算的牛逼了。

【在 a****s 的大作中提到】
: 用quicksort 的idea, 找一个pivot, 然后partition, 扔掉有3n个elements 的
: partition, 如果两个partition都有3n个elements, 那么pivot就是要找的element.

s*****y
发帖数: 897
18
looks like the ones twos and no-threes mean the bit position?
Is it?

【在 M*****e 的大作中提到】
: 这个变量名已经说得很明确了,
: ones就是所有出现过一次的,所以每次更新用xor (注意后面去除了三次的)。
: twos就是出现过两次的,更新的意思就是如果当前数b[i]在ones中存在, b[i]&ones,
: 就加到twos里面。
: three就是一次和两次都出现过的,所以要从ones和twos中每次去除, & not_threes

r*****l
发帖数: 2859
19
这这,如果第一个数是4呢?

【在 s*****y 的大作中提到】
: You mean convert all the integer to binary.
: Then add all the bit in each postion then mod 3?
: for example:
: 1 0001
: 3 0011
: 3 0011
: 3 0011
: 2 0010
: 2 0010
: 2 0010

s*****y
发帖数: 897
20
what do you mean? There is only one number that happen once?

【在 r*****l 的大作中提到】
: 这这,如果第一个数是4呢?
相关主题
如何判断一个数是不是回文?大家看看这几道亚麻面试题怎么做?
面试题里的bitwise operatorG面试题
请教一个面试题面试题 finding missing value
进入JobHunting版参与讨论
r*****l
发帖数: 2859
21
你那个0067哪来的?

You mean convert all the integer to binary.
Then add all the bit in each postion then mod 3?
for example:
1 0001
3 0011
3 0011
3 0011
2 0010
2 0010
2 0010
+

【在 s*****y 的大作中提到】
: what do you mean? There is only one number that happen once?
r*****l
发帖数: 2859
22
所有数转换成三进制。
1,每个数个位相加,取结果最低位,作为个位。
2,每个数十位相加,取结果最低位,作为十位。
。。。
然后再转成10进制。
20,3,3,3,7,7,7
20 - 202 (三进制)
3 - 10
3 - 10
3 - 10
7 - 21
7 - 21
7 - 21
个位 2+1+1+1=12 => 2
十位 1+1+1+2+2+2=0 => 0
百位 2 => 2
结果 202(三进制)=> 20

【在 s******e 的大作中提到】
: 数组中有1个数出现一次,其他数出现三次,怎么求出这个出现1次的数
: 求不用额外内存的O(n)的方法,谢谢
: 可以constant的内存

s*****y
发帖数: 897
23
SORRY. My typo. should be 0064

【在 r*****l 的大作中提到】
: 你那个0067哪来的?
:
: You mean convert all the integer to binary.
: Then add all the bit in each postion then mod 3?
: for example:
: 1 0001
: 3 0011
: 3 0011
: 3 0011
: 2 0010

s*****y
发帖数: 897
24
But then 1 happen only twice. The question said that only one number happen
once and all the other number happen 3 times.

【在 r*****l 的大作中提到】
: 所有数转换成三进制。
: 1,每个数个位相加,取结果最低位,作为个位。
: 2,每个数十位相加,取结果最低位,作为十位。
: 。。。
: 然后再转成10进制。
: 20,3,3,3,7,7,7
: 20 - 202 (三进制)
: 3 - 10
: 3 - 10
: 3 - 10

r*****l
发帖数: 2859
25
如果是4,3,3,3,2,2,2,用你的方法
100
011
011
011
010
010
010
+
d**e
发帖数: 6098
26
the mod is
1%3
6%3
3%3
not 163%3

【在 r*****l 的大作中提到】
: 如果是4,3,3,3,2,2,2,用你的方法
: 100
: 011
: 011
: 011
: 010
: 010
: 010
: +

s*****y
发帖数: 897
27
sorry. The mod operaton is for each bit position, not for the sum.
So it is really tricky to code the problem in this way.
163 is 1mode3 6mod3 3mod3 so result is 100.

【在 r*****l 的大作中提到】
: 如果是4,3,3,3,2,2,2,用你的方法
: 100
: 011
: 011
: 011
: 010
: 010
: 010
: +

r*****l
发帖数: 2859
28
This makes sense. Thanks

【在 s*****y 的大作中提到】
: sorry. The mod operaton is for each bit position, not for the sum.
: So it is really tricky to code the problem in this way.
: 163 is 1mode3 6mod3 3mod3 so result is 100.

m**q
发帖数: 189
29
Good point, a few details though:
1 1 2 2 3 2 4 1 4 4
For example, we picked 2 as pivot, as we divided the array to
the following
1 1 1 2 2 2 3 4 4 4
< 2 pivot >= 2
Then both sides have 3n elements, but pivot value 2 is not the
one we want to find. In this case we can save discard the left
half, and simply compare pivot with its next neighbour on the right,
if they are not equal then we're done and pivot is the one, otherwise
continue with the right half.

【在 a****s 的大作中提到】
: 用quicksort 的idea, 找一个pivot, 然后partition, 扔掉有3n个elements 的
: partition, 如果两个partition都有3n个elements, 那么pivot就是要找的element.

k*****7
发帖数: 72
30
for( i=0; i< 10; i++ )
{
x = B[i];
twos |= ones & x ;
ones ^= x ;
not_threes = ~(ones & twos) ;
ones &= not_threes ;
twos &= not_threes ;
}
这个太牛了~~~醍醐灌顶啊
相关主题
求解面试题一道面试题
编程菜鸟,请教CISCO面试题。A家2面经。已经被句。。
求教一道解法很巧妙的GOOGLE面试题问一个G家面试题
进入JobHunting版参与讨论
m**q
发帖数: 189
31
明白你说的意思了,但还是没有映射到代码上去
为什么用 twos |= x & ones 就能把x加到twos里面去了呢?

【在 M*****e 的大作中提到】
: 这个变量名已经说得很明确了,
: ones就是所有出现过一次的,所以每次更新用xor (注意后面去除了三次的)。
: twos就是出现过两次的,更新的意思就是如果当前数b[i]在ones中存在, b[i]&ones,
: 就加到twos里面。
: three就是一次和两次都出现过的,所以要从ones和twos中每次去除, & not_threes

s*****y
发帖数: 897
32
同问,这几句小代码隐含的数学很深阿。。。。。
g*****n
发帖数: 216
33
quick sort and use rank information

【在 s******e 的大作中提到】
: 数组中有1个数出现一次,其他数出现三次,怎么求出这个出现1次的数
: 求不用额外内存的O(n)的方法,谢谢
: 可以constant的内存

i****s
发帖数: 1152
34
how about this case
1,5,5,5,7,7,7,11,11,11
1 - 1
5 - 101
5 - 101
5 - 101
7 - 111
7 - 111
7 - 111
11 - 1011
11 - 1011
11 - 1011
the bit-wise sum value turns to be 3660. mod 3 ends up with 0.

【在 s*****y 的大作中提到】
: sorry. The mod operaton is for each bit position, not for the sum.
: So it is really tricky to code the problem in this way.
: 163 is 1mode3 6mod3 3mod3 so result is 100.

s*****t
发帖数: 987
35

他的意思应该是把这个都加起来,不算进位的,最后一位加在一起是10,然后mod 3就
会是1

【在 i****s 的大作中提到】
: how about this case
: 1,5,5,5,7,7,7,11,11,11
: 1 - 1
: 5 - 101
: 5 - 101
: 5 - 101
: 7 - 111
: 7 - 111
: 7 - 111
: 11 - 1011

i****s
发帖数: 1152
36
直接转3进制,bitwise sum 不进位应该更好一些吧.

【在 s*****t 的大作中提到】
:
: 他的意思应该是把这个都加起来,不算进位的,最后一位加在一起是10,然后mod 3就
: 会是1

l*****g
发帖数: 685
37
这个方法需要O(n)的额外空间吧

【在 a****s 的大作中提到】
: 用quicksort 的idea, 找一个pivot, 然后partition, 扔掉有3n个elements 的
: partition, 如果两个partition都有3n个elements, 那么pivot就是要找的element.

l*****g
发帖数: 685
38
cool
而且这个可以很简洁地推广到有n个相同元素的问题

【在 r*****l 的大作中提到】
: 所有数转换成三进制。
: 1,每个数个位相加,取结果最低位,作为个位。
: 2,每个数十位相加,取结果最低位,作为十位。
: 。。。
: 然后再转成10进制。
: 20,3,3,3,7,7,7
: 20 - 202 (三进制)
: 3 - 10
: 3 - 10
: 3 - 10

g**e
发帖数: 6127
39
我觉得这种方法不是constant space,跟最大数转换成n进制之后的位数有关

【在 l*****g 的大作中提到】
: cool
: 而且这个可以很简洁地推广到有n个相同元素的问题

l*****g
发帖数: 685
40
n进制中的n对于这个问题来说应该算常量
变量是array中的元素数目

【在 g**e 的大作中提到】
: 我觉得这种方法不是constant space,跟最大数转换成n进制之后的位数有关
相关主题
问一个G家面试题这些找missing number的题是不是都不能用求和做?
高通 面试题 疑问。。bloomberg 店面
take a break, and try this small test (20 questions)上一道题给你们休息休息
进入JobHunting版参与讨论
r*****e
发帖数: 792
41
How to apply the careercup method if the given array
has only one number appearing once, some twice and
some three times?
Cannot think of a bit-wise based way to find the only
number by reading the array only one time.
Thanks for giving your thoughts.
1 (共1页)
进入JobHunting版参与讨论
相关主题
G面试题高通 面试题 疑问。。
面试题 finding missing valuetake a break, and try this small test (20 questions)
求解面试题这些找missing number的题是不是都不能用求和做?
编程菜鸟,请教CISCO面试题。bloomberg 店面
求教一道解法很巧妙的GOOGLE面试题上一道题给你们休息休息
一道面试题其实我很想知道, 多少软工能45分钟内把quicksort写下来
A家2面经。已经被句。。Google intern 面经,回馈版面
问一个G家面试题如何判断一个数是不是回文?
相关话题的讨论汇总
话题: twos话题: ones话题: threes话题: 0010话题: pivot