由买买提看人间百态

boards

本页内容为未名空间相应帖子的节选和存档,一周内的贴子最多显示50字,超过一周显示500字 访问原贴
JobHunting版 - 分享一道电面题,兼下午Onsite攒人品求祝福
相关主题
弱问一个150上的10.3题,bit vector的。。。问个题目
油管面经如何左右翻转Byte
面试题贡献一道题
Post 1 question: Bits operation using C programming定义一个数组, 巨简单的一个问题
问一道题目read4 / read4k 实现readAny复杂吗?
C++ Q86: Find the bits that are one in a byte (in C)问一个怎么存很大两维数组
请教一道bit操作的经典题对于一个byte[] 数组,怎么计算比特位会比 O(8n)快?
一道面试题几道微软面试题
相关话题的讨论汇总
话题: byteindex话题: int话题: bitindex话题: byteflags
进入JobHunting版参与讨论
1 (共1页)
s*********5
发帖数: 514
1
上午刚面的题,感觉有点意思:
一个大数组,在1到25000之间,只有4K memory, 打印出其中正好只出现过一次的数。
没出现过,出现过2次,3次,或更多,都不打印。
分享给大家,千万别翻成英文。
晚上回来跟大家讨论。
马上去另一家Onsite了, bless 我吧
m***e
发帖数: 48
2
use bit index byte number to indicate number
then you have 32k memory logically

【在 s*********5 的大作中提到】
: 上午刚面的题,感觉有点意思:
: 一个大数组,在1到25000之间,只有4K memory, 打印出其中正好只出现过一次的数。
: 没出现过,出现过2次,3次,或更多,都不打印。
: 分享给大家,千万别翻成英文。
: 晚上回来跟大家讨论。
: 马上去另一家Onsite了, bless 我吧

d******u
发帖数: 397
3
bitmap解的话需要至少50k-bit的内存,4k-B不够。。。
g*********e
发帖数: 14401
4
弄俩次不就行了。第一次只对1-12500的数进行操作,第二次12501-25000
l*********8
发帖数: 4642
5
One round is enough. Use 3 bits to store status of two numbers.

【在 g*********e 的大作中提到】
: 弄俩次不就行了。第一次只对1-12500的数进行操作,第二次12501-25000
g*********e
发帖数: 14401
6

3bit只能表示8种,2数需要9种。

【在 l*********8 的大作中提到】
: One round is enough. Use 3 bits to store status of two numbers.
y****n
发帖数: 743
7
两遍:
第一遍,当数字第一次出现时,置相应bit为true。
当数字第二次出现时,把数字本身置为负数。
第二遍,当数字为负数时,置相应bit为false。同时恢复数字为正整数。
p**p
发帖数: 2493
8
bless your all!
Y***a
发帖数: 463
9
Bless
z*q
发帖数: 1640
10
bless
相关主题
C++ Q86: Find the bits that are one in a byte (in C)问个题目
请教一道bit操作的经典题如何左右翻转Byte
一道面试题贡献一道题
进入JobHunting版参与讨论
m******s
发帖数: 1469
11
Bless

【在 s*********5 的大作中提到】
: 上午刚面的题,感觉有点意思:
: 一个大数组,在1到25000之间,只有4K memory, 打印出其中正好只出现过一次的数。
: 没出现过,出现过2次,3次,或更多,都不打印。
: 分享给大家,千万别翻成英文。
: 晚上回来跟大家讨论。
: 马上去另一家Onsite了, bless 我吧

l*********8
发帖数: 4642
12
Bless
s*********5
发帖数: 514
13
Onsite 拿到了,晚些时候给大家发包子。
另外yishan那个算法很不错,我当时没想出来。
s*********5
发帖数: 514
14
恩,看来攒人品还是很有道理的。
h****e
发帖数: 928
15
为什么两个数要9种呢,不是2x3(0,1, >1三种情况)=6种吗?

【在 g*********e 的大作中提到】
:
: 3bit只能表示8种,2数需要9种。

S****h
发帖数: 115
16
是3*3吧,排列组合

【在 h****e 的大作中提到】
: 为什么两个数要9种呢,不是2x3(0,1, >1三种情况)=6种吗?
h****e
发帖数: 928
17
明白了。

【在 S****h 的大作中提到】
: 是3*3吧,排列组合
d******u
发帖数: 397
18
yishan的方法没太明白
怎么把第二次出现的数改成负数啊,如果内存只有4k,那这些数肯定装不进内存,要从
文件读
难道是把文件里面的数置成负数?如果不让改文件呢?

【在 s*********5 的大作中提到】
: Onsite 拿到了,晚些时候给大家发包子。
: 另外yishan那个算法很不错,我当时没想出来。

y****n
发帖数: 743
19
4K Bytes = 32K Bits,每个bit对应一个整数,足够应对1-25000的范围。
原题说能拿到一个数组,而不是文件,把数组里的数字置为负数arr[n]=-arr[n]
通过数字的符号和相应的bit值组合成三种可能:未出现,出现一次,出现多次

【在 d******u 的大作中提到】
: yishan的方法没太明白
: 怎么把第二次出现的数改成负数啊,如果内存只有4k,那这些数肯定装不进内存,要从
: 文件读
: 难道是把文件里面的数置成负数?如果不让改文件呢?

a****s
发帖数: 4254
20
bless
相关主题
定义一个数组, 巨简单的一个问题对于一个byte[] 数组,怎么计算比特位会比 O(8n)快?
read4 / read4k 实现readAny复杂吗?几道微软面试题
问一个怎么存很大两维数组请教:string pattern match 题
进入JobHunting版参与讨论
d******u
发帖数: 397
21
I see. thank you!

【在 y****n 的大作中提到】
: 4K Bytes = 32K Bits,每个bit对应一个整数,足够应对1-25000的范围。
: 原题说能拿到一个数组,而不是文件,把数组里的数字置为负数arr[n]=-arr[n]
: 通过数字的符号和相应的bit值组合成三种可能:未出现,出现一次,出现多次

z*****n
发帖数: 447
22
出现3次,4次怎么处理呢,仅用Bit和符号分不出来。

【在 y****n 的大作中提到】
: 4K Bytes = 32K Bits,每个bit对应一个整数,足够应对1-25000的范围。
: 原题说能拿到一个数组,而不是文件,把数组里的数字置为负数arr[n]=-arr[n]
: 通过数字的符号和相应的bit值组合成三种可能:未出现,出现一次,出现多次

w****o
发帖数: 2260
23
yishan,
我觉得你的方法不行。可能是我没有太理解。
举个简单的例子,
比如一个数组, 5 5 5
第一遍:
第一个5出现的时候,你把 bitflag[5] = 1
第二个5出现的时候,bitflag[5]仍是1, 同时数组变成了 5 -5 5
第三个5出现的时候,bitflag[5]仍是1, 同时数组变成了 5 -5 -5
到这里我的理解是对的吗?
可是你的第二遍,我就没有弄明白了。
第二遍:
遇到5,bitflag[5]是1,数组不做改动,仍是5 -5 -5
然后遇到-5, 怎么办?设bitflag[5]=0?,数组变成 5 5 -5?
然后遇到-5,怎么办?
你什么时候判断5是出现了几次?
谢谢!

【在 y****n 的大作中提到】
: 两遍:
: 第一遍,当数字第一次出现时,置相应bit为true。
: 当数字第二次出现时,把数字本身置为负数。
: 第二遍,当数字为负数时,置相应bit为false。同时恢复数字为正整数。

y****n
发帖数: 743
24
你的第一编理解和我的想法是一样的。
第二遍:
遇到5,bitflag[5]是1,数组不做改动,仍是5 -5 -5 [对]
然后遇到-5, 怎么办?设bitflag[5]=0?,数组变成 5 5 -5?[对]
然后遇到-5,怎么办?[继续设bitflag[5]=0,数组变成 5 5 5]
最终结果,出现一次数字的相应bitflag是1,出现多次的是0,没出现的也是0

【在 w****o 的大作中提到】
: yishan,
: 我觉得你的方法不行。可能是我没有太理解。
: 举个简单的例子,
: 比如一个数组, 5 5 5
: 第一遍:
: 第一个5出现的时候,你把 bitflag[5] = 1
: 第二个5出现的时候,bitflag[5]仍是1, 同时数组变成了 5 -5 5
: 第三个5出现的时候,bitflag[5]仍是1, 同时数组变成了 5 -5 -5
: 到这里我的理解是对的吗?
: 可是你的第二遍,我就没有弄明白了。

y****n
发帖数: 743
25
简单思路实现,忽略输入检查和容错代码,希望没犯什么低级错误。
class NumberFlags
{
// 25000 bits => 3125 bytes
private byte[] byteFlags = new byte[3126];
public void Put(int number)
{
int byteIndex = number / 8;
int bitIndex = number % 8;
byteFlags[byteIndex] = (byte)(byteFlags[byteIndex] | (1 << bitIndex)
);
}
public void Remove(int number)
{
int byteIndex = number / 8;
int bitIndex = number % 8;
byteFlags[byteIndex] = (byte)(byteFlags[byteIndex] & ~(1 << bitIndex
));
}
public bool Exists(int number)
{
int byteIndex = number / 8;
int bitIndex = number % 8;
int value = byteFlags[byteIndex] & (1 << bitIndex);
return value > 0;
}
}
NumberFlags FindUnique(int [] array)
{
NumberFlags numberFlags = new NumberFlags();
for (int i = 0; i < array.Length; i++)
{
if (numberFlags.Exists(array[i]))
array[i] = -array[i];
else
numberFlags.Put(array[i]);
}
for (int i = 0; i < array.Length; i++)
{
if (array[i] < 0)
{
array[i] = -array[i];
numberFlags.Remove(array[i]);
}
}
return numberFlags;
}
w****o
发帖数: 2260
26
你太牛了。
不过这个方法和每个说用两个bits,扫两遍,也没有太大的区别(我是说用的时间)。
当然你的方法很新颖。
谢谢!

【在 y****n 的大作中提到】
: 你的第一编理解和我的想法是一样的。
: 第二遍:
: 遇到5,bitflag[5]是1,数组不做改动,仍是5 -5 -5 [对]
: 然后遇到-5, 怎么办?设bitflag[5]=0?,数组变成 5 5 -5?[对]
: 然后遇到-5,怎么办?[继续设bitflag[5]=0,数组变成 5 5 5]
: 最终结果,出现一次数字的相应bitflag是1,出现多次的是0,没出现的也是0

b***e
发帖数: 383
27

这个方法的确不错。

【在 y****n 的大作中提到】
: 两遍:
: 第一遍,当数字第一次出现时,置相应bit为true。
: 当数字第二次出现时,把数字本身置为负数。
: 第二遍,当数字为负数时,置相应bit为false。同时恢复数字为正整数。

p*****2
发帖数: 21240
28
yishan的这个思路很有趣。好像上次解一道题也是这种思路。不知道是学来的,还是自
己想出来的。
y****n
发帖数: 743
29
多谢评价,思路是自己想的,但不是什么好思虑,万不得已。
一般情况,我们尽量不会去改输入的数据,这样会带来很多麻烦。
多线程,函数中遇到exception都回出问题。不过对方只给4K空间,没有办法。

【在 p*****2 的大作中提到】
: yishan的这个思路很有趣。好像上次解一道题也是这种思路。不知道是学来的,还是自
: 己想出来的。

y****n
发帖数: 743
30
两个方法各有优势,各有软肋:
我的方法:
优点:代码结束时能得到完整的可再利用的结果。
缺点:执行过程中修改了数据,实际项目中不能这样做。
你说的方法(两个bits,扫两遍)
优点:思路简单,不用修改原数据
缺点:只能在执行时输出,不能返回结果。
原体要求“打印”还好,如果原体要求“返回”,你说的方法就不能用了。

【在 w****o 的大作中提到】
: 你太牛了。
: 不过这个方法和每个说用两个bits,扫两遍,也没有太大的区别(我是说用的时间)。
: 当然你的方法很新颖。
: 谢谢!

相关主题
GF面经油管面经
讨论一下FB的经典题read和readline吧面试题
弱问一个150上的10.3题,bit vector的。。。Post 1 question: Bits operation using C programming
进入JobHunting版参与讨论
J*****u
发帖数: 30
31
为什么不能在第二次出现直接标为false呢?谢

4K Bytes = 32K Bits,每个bit对应一个整数,足够应对1-25000的范围。原题说能拿
到一个数组,而不是文件,把数组里的数字置为负数arr[n]=-arr[n........
★ Sent from iPhone App: iReader Mitbbs Lite 7.52

【在 y****n 的大作中提到】
: 4K Bytes = 32K Bits,每个bit对应一个整数,足够应对1-25000的范围。
: 原题说能拿到一个数组,而不是文件,把数组里的数字置为负数arr[n]=-arr[n]
: 通过数字的符号和相应的bit值组合成三种可能:未出现,出现一次,出现多次

J*****u
发帖数: 30
32
已经明白了,谢

两遍:第一遍,当数字第一次出现时,置相应bit为true。当数字第二次出现时,把数
字本身置为负数。第二遍,当数字为负数时,置相应bit为false。同时恢复数字为正整
数。
★ Sent from iPhone App: iReader Mitbbs Lite 7.52

【在 y****n 的大作中提到】
: 两个方法各有优势,各有软肋:
: 我的方法:
: 优点:代码结束时能得到完整的可再利用的结果。
: 缺点:执行过程中修改了数据,实际项目中不能这样做。
: 你说的方法(两个bits,扫两遍)
: 优点:思路简单,不用修改原数据
: 缺点:只能在执行时输出,不能返回结果。
: 原体要求“打印”还好,如果原体要求“返回”,你说的方法就不能用了。

s*********5
发帖数: 514
33
上午刚面的题,感觉有点意思:
一个大数组,在1到25000之间,只有4K memory, 打印出其中正好只出现过一次的数。
没出现过,出现过2次,3次,或更多,都不打印。
分享给大家,千万别翻成英文。
晚上回来跟大家讨论。
马上去另一家Onsite了, bless 我吧
m***e
发帖数: 48
34
use bit index byte number to indicate number
then you have 32k memory logically

【在 s*********5 的大作中提到】
: 上午刚面的题,感觉有点意思:
: 一个大数组,在1到25000之间,只有4K memory, 打印出其中正好只出现过一次的数。
: 没出现过,出现过2次,3次,或更多,都不打印。
: 分享给大家,千万别翻成英文。
: 晚上回来跟大家讨论。
: 马上去另一家Onsite了, bless 我吧

d******u
发帖数: 397
35
bitmap解的话需要至少50k-bit的内存,4k-B不够。。。
g*********e
发帖数: 14401
36
弄俩次不就行了。第一次只对1-12500的数进行操作,第二次12501-25000
l*********8
发帖数: 4642
37
One round is enough. Use 3 bits to store status of two numbers.

【在 g*********e 的大作中提到】
: 弄俩次不就行了。第一次只对1-12500的数进行操作,第二次12501-25000
g*********e
发帖数: 14401
38

3bit只能表示8种,2数需要9种。

【在 l*********8 的大作中提到】
: One round is enough. Use 3 bits to store status of two numbers.
y****n
发帖数: 743
39
两遍:
第一遍,当数字第一次出现时,置相应bit为true。
当数字第二次出现时,把数字本身置为负数。
第二遍,当数字为负数时,置相应bit为false。同时恢复数字为正整数。
p**p
发帖数: 2493
40
bless your all!
相关主题
Post 1 question: Bits operation using C programming请教一道bit操作的经典题
问一道题目一道面试题
C++ Q86: Find the bits that are one in a byte (in C)问个题目
进入JobHunting版参与讨论
Y***a
发帖数: 463
41
Bless
z*q
发帖数: 1640
42
bless
m******s
发帖数: 1469
43
Bless

【在 s*********5 的大作中提到】
: 上午刚面的题,感觉有点意思:
: 一个大数组,在1到25000之间,只有4K memory, 打印出其中正好只出现过一次的数。
: 没出现过,出现过2次,3次,或更多,都不打印。
: 分享给大家,千万别翻成英文。
: 晚上回来跟大家讨论。
: 马上去另一家Onsite了, bless 我吧

l*********8
发帖数: 4642
44
Bless
s*********5
发帖数: 514
45
Onsite 拿到了,晚些时候给大家发包子。
另外yishan那个算法很不错,我当时没想出来。
s*********5
发帖数: 514
46
恩,看来攒人品还是很有道理的。
h****e
发帖数: 928
47
为什么两个数要9种呢,不是2x3(0,1, >1三种情况)=6种吗?

【在 g*********e 的大作中提到】
:
: 3bit只能表示8种,2数需要9种。

S****h
发帖数: 115
48
是3*3吧,排列组合

【在 h****e 的大作中提到】
: 为什么两个数要9种呢,不是2x3(0,1, >1三种情况)=6种吗?
h****e
发帖数: 928
49
明白了。

【在 S****h 的大作中提到】
: 是3*3吧,排列组合
d******u
发帖数: 397
50
yishan的方法没太明白
怎么把第二次出现的数改成负数啊,如果内存只有4k,那这些数肯定装不进内存,要从
文件读
难道是把文件里面的数置成负数?如果不让改文件呢?

【在 s*********5 的大作中提到】
: Onsite 拿到了,晚些时候给大家发包子。
: 另外yishan那个算法很不错,我当时没想出来。

相关主题
如何左右翻转Byteread4 / read4k 实现readAny复杂吗?
贡献一道题问一个怎么存很大两维数组
定义一个数组, 巨简单的一个问题对于一个byte[] 数组,怎么计算比特位会比 O(8n)快?
进入JobHunting版参与讨论
y****n
发帖数: 743
51
4K Bytes = 32K Bits,每个bit对应一个整数,足够应对1-25000的范围。
原题说能拿到一个数组,而不是文件,把数组里的数字置为负数arr[n]=-arr[n]
通过数字的符号和相应的bit值组合成三种可能:未出现,出现一次,出现多次

【在 d******u 的大作中提到】
: yishan的方法没太明白
: 怎么把第二次出现的数改成负数啊,如果内存只有4k,那这些数肯定装不进内存,要从
: 文件读
: 难道是把文件里面的数置成负数?如果不让改文件呢?

a****s
发帖数: 4254
52
bless
d******u
发帖数: 397
53
I see. thank you!

【在 y****n 的大作中提到】
: 4K Bytes = 32K Bits,每个bit对应一个整数,足够应对1-25000的范围。
: 原题说能拿到一个数组,而不是文件,把数组里的数字置为负数arr[n]=-arr[n]
: 通过数字的符号和相应的bit值组合成三种可能:未出现,出现一次,出现多次

z*****n
发帖数: 447
54
出现3次,4次怎么处理呢,仅用Bit和符号分不出来。

【在 y****n 的大作中提到】
: 4K Bytes = 32K Bits,每个bit对应一个整数,足够应对1-25000的范围。
: 原题说能拿到一个数组,而不是文件,把数组里的数字置为负数arr[n]=-arr[n]
: 通过数字的符号和相应的bit值组合成三种可能:未出现,出现一次,出现多次

w****o
发帖数: 2260
55
yishan,
我觉得你的方法不行。可能是我没有太理解。
举个简单的例子,
比如一个数组, 5 5 5
第一遍:
第一个5出现的时候,你把 bitflag[5] = 1
第二个5出现的时候,bitflag[5]仍是1, 同时数组变成了 5 -5 5
第三个5出现的时候,bitflag[5]仍是1, 同时数组变成了 5 -5 -5
到这里我的理解是对的吗?
可是你的第二遍,我就没有弄明白了。
第二遍:
遇到5,bitflag[5]是1,数组不做改动,仍是5 -5 -5
然后遇到-5, 怎么办?设bitflag[5]=0?,数组变成 5 5 -5?
然后遇到-5,怎么办?
你什么时候判断5是出现了几次?
谢谢!

【在 y****n 的大作中提到】
: 两遍:
: 第一遍,当数字第一次出现时,置相应bit为true。
: 当数字第二次出现时,把数字本身置为负数。
: 第二遍,当数字为负数时,置相应bit为false。同时恢复数字为正整数。

y****n
发帖数: 743
56
你的第一编理解和我的想法是一样的。
第二遍:
遇到5,bitflag[5]是1,数组不做改动,仍是5 -5 -5 [对]
然后遇到-5, 怎么办?设bitflag[5]=0?,数组变成 5 5 -5?[对]
然后遇到-5,怎么办?[继续设bitflag[5]=0,数组变成 5 5 5]
最终结果,出现一次数字的相应bitflag是1,出现多次的是0,没出现的也是0

【在 w****o 的大作中提到】
: yishan,
: 我觉得你的方法不行。可能是我没有太理解。
: 举个简单的例子,
: 比如一个数组, 5 5 5
: 第一遍:
: 第一个5出现的时候,你把 bitflag[5] = 1
: 第二个5出现的时候,bitflag[5]仍是1, 同时数组变成了 5 -5 5
: 第三个5出现的时候,bitflag[5]仍是1, 同时数组变成了 5 -5 -5
: 到这里我的理解是对的吗?
: 可是你的第二遍,我就没有弄明白了。

y****n
发帖数: 743
57
简单思路实现,忽略输入检查和容错代码,希望没犯什么低级错误。
class NumberFlags
{
// 25000 bits => 3125 bytes
private byte[] byteFlags = new byte[3126];
public void Put(int number)
{
int byteIndex = number / 8;
int bitIndex = number % 8;
byteFlags[byteIndex] = (byte)(byteFlags[byteIndex] | (1 << bitIndex)
);
}
public void Remove(int number)
{
int byteIndex = number / 8;
int bitIndex = number % 8;
byteFlags[byteIndex] = (byte)(byteFlags[byteIndex] & ~(1 << bitIndex
));
}
public bool Exists(int number)
{
int byteIndex = number / 8;
int bitIndex = number % 8;
int value = byteFlags[byteIndex] & (1 << bitIndex);
return value > 0;
}
}
NumberFlags FindUnique(int [] array)
{
NumberFlags numberFlags = new NumberFlags();
for (int i = 0; i < array.Length; i++)
{
if (numberFlags.Exists(array[i]))
array[i] = -array[i];
else
numberFlags.Put(array[i]);
}
for (int i = 0; i < array.Length; i++)
{
if (array[i] < 0)
{
array[i] = -array[i];
numberFlags.Remove(array[i]);
}
}
return numberFlags;
}
w****o
发帖数: 2260
58
你太牛了。
不过这个方法和每个说用两个bits,扫两遍,也没有太大的区别(我是说用的时间)。
当然你的方法很新颖。
谢谢!

【在 y****n 的大作中提到】
: 你的第一编理解和我的想法是一样的。
: 第二遍:
: 遇到5,bitflag[5]是1,数组不做改动,仍是5 -5 -5 [对]
: 然后遇到-5, 怎么办?设bitflag[5]=0?,数组变成 5 5 -5?[对]
: 然后遇到-5,怎么办?[继续设bitflag[5]=0,数组变成 5 5 5]
: 最终结果,出现一次数字的相应bitflag是1,出现多次的是0,没出现的也是0

b***e
发帖数: 383
59

这个方法的确不错。

【在 y****n 的大作中提到】
: 两遍:
: 第一遍,当数字第一次出现时,置相应bit为true。
: 当数字第二次出现时,把数字本身置为负数。
: 第二遍,当数字为负数时,置相应bit为false。同时恢复数字为正整数。

p*****2
发帖数: 21240
60
yishan的这个思路很有趣。好像上次解一道题也是这种思路。不知道是学来的,还是自
己想出来的。
相关主题
几道微软面试题讨论一下FB的经典题read和readline吧
请教:string pattern match 题弱问一个150上的10.3题,bit vector的。。。
GF面经油管面经
进入JobHunting版参与讨论
y****n
发帖数: 743
61
多谢评价,思路是自己想的,但不是什么好思虑,万不得已。
一般情况,我们尽量不会去改输入的数据,这样会带来很多麻烦。
多线程,函数中遇到exception都回出问题。不过对方只给4K空间,没有办法。

【在 p*****2 的大作中提到】
: yishan的这个思路很有趣。好像上次解一道题也是这种思路。不知道是学来的,还是自
: 己想出来的。

y****n
发帖数: 743
62
两个方法各有优势,各有软肋:
我的方法:
优点:代码结束时能得到完整的可再利用的结果。
缺点:执行过程中修改了数据,实际项目中不能这样做。
你说的方法(两个bits,扫两遍)
优点:思路简单,不用修改原数据
缺点:只能在执行时输出,不能返回结果。
原体要求“打印”还好,如果原体要求“返回”,你说的方法就不能用了。

【在 w****o 的大作中提到】
: 你太牛了。
: 不过这个方法和每个说用两个bits,扫两遍,也没有太大的区别(我是说用的时间)。
: 当然你的方法很新颖。
: 谢谢!

J*****u
发帖数: 30
63
为什么不能在第二次出现直接标为false呢?谢

4K Bytes = 32K Bits,每个bit对应一个整数,足够应对1-25000的范围。原题说能拿
到一个数组,而不是文件,把数组里的数字置为负数arr[n]=-arr[n........
★ Sent from iPhone App: iReader Mitbbs Lite 7.52

【在 y****n 的大作中提到】
: 4K Bytes = 32K Bits,每个bit对应一个整数,足够应对1-25000的范围。
: 原题说能拿到一个数组,而不是文件,把数组里的数字置为负数arr[n]=-arr[n]
: 通过数字的符号和相应的bit值组合成三种可能:未出现,出现一次,出现多次

J*****u
发帖数: 30
64
已经明白了,谢

两遍:第一遍,当数字第一次出现时,置相应bit为true。当数字第二次出现时,把数
字本身置为负数。第二遍,当数字为负数时,置相应bit为false。同时恢复数字为正整
数。
★ Sent from iPhone App: iReader Mitbbs Lite 7.52

【在 y****n 的大作中提到】
: 两个方法各有优势,各有软肋:
: 我的方法:
: 优点:代码结束时能得到完整的可再利用的结果。
: 缺点:执行过程中修改了数据,实际项目中不能这样做。
: 你说的方法(两个bits,扫两遍)
: 优点:思路简单,不用修改原数据
: 缺点:只能在执行时输出,不能返回结果。
: 原体要求“打印”还好,如果原体要求“返回”,你说的方法就不能用了。

c*u
发帖数: 22
65
是这样么?
loop 1.. n
arr[arr[n]] = (arr[n]==arr[arr[n]]) ? arr[arr[n]] * 1 : arr[arr[n]] * -1;
loop 1.. n
if(arr[n]<0)
print n;

【在 y****n 的大作中提到】
: 4K Bytes = 32K Bits,每个bit对应一个整数,足够应对1-25000的范围。
: 原题说能拿到一个数组,而不是文件,把数组里的数字置为负数arr[n]=-arr[n]
: 通过数字的符号和相应的bit值组合成三种可能:未出现,出现一次,出现多次

c*u
发帖数: 22
66
同时输出索引怎办?

是这样么?
loop 1.. n
arr[arr[n]] = (arr[n]==arr[arr[n]]) ? arr[arr[n]] * 1 : arr[arr[n]] * -1;
loop 1.. n
if(arr[n]<0)
print n;

【在 c*u 的大作中提到】
: 是这样么?
: loop 1.. n
: arr[arr[n]] = (arr[n]==arr[arr[n]]) ? arr[arr[n]] * 1 : arr[arr[n]] * -1;
: loop 1.. n
: if(arr[n]<0)
: print n;

t*********h
发帖数: 941
67
这个 byteFlags[byteIndex] = (byte)(byteFlags[byteIndex] | (1 << bitIndex)
什么原理?

bitIndex)

【在 y****n 的大作中提到】
: 简单思路实现,忽略输入检查和容错代码,希望没犯什么低级错误。
: class NumberFlags
: {
: // 25000 bits => 3125 bytes
: private byte[] byteFlags = new byte[3126];
: public void Put(int number)
: {
: int byteIndex = number / 8;
: int bitIndex = number % 8;
: byteFlags[byteIndex] = (byte)(byteFlags[byteIndex] | (1 << bitIndex)

1 (共1页)
进入JobHunting版参与讨论
相关主题
几道微软面试题问一道题目
请教:string pattern match 题C++ Q86: Find the bits that are one in a byte (in C)
GF面经请教一道bit操作的经典题
讨论一下FB的经典题read和readline吧一道面试题
弱问一个150上的10.3题,bit vector的。。。问个题目
油管面经如何左右翻转Byte
面试题贡献一道题
Post 1 question: Bits operation using C programming定义一个数组, 巨简单的一个问题
相关话题的讨论汇总
话题: byteindex话题: int话题: bitindex话题: byteflags