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 | |
Y***a 发帖数: 463 | |
z*q 发帖数: 1640 | |
|
|
m******s 发帖数: 1469 | 11 Bless
【在 s*********5 的大作中提到】 : 上午刚面的题,感觉有点意思: : 一个大数组,在1到25000之间,只有4K memory, 打印出其中正好只出现过一次的数。 : 没出现过,出现过2次,3次,或更多,都不打印。 : 分享给大家,千万别翻成英文。 : 晚上回来跟大家讨论。 : 马上去另一家Onsite了, bless 我吧
|
l*********8 发帖数: 4642 | |
s*********5 发帖数: 514 | 13 Onsite 拿到了,晚些时候给大家发包子。
另外yishan那个算法很不错,我当时没想出来。 |
s*********5 发帖数: 514 | |
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 | |
|
|
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,扫两遍,也没有太大的区别(我是说用的时间)。 : 当然你的方法很新颖。 : 谢谢!
|
|
|
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 | |
|
|
Y***a 发帖数: 463 | |
z*q 发帖数: 1640 | |
m******s 发帖数: 1469 | 43 Bless
【在 s*********5 的大作中提到】 : 上午刚面的题,感觉有点意思: : 一个大数组,在1到25000之间,只有4K memory, 打印出其中正好只出现过一次的数。 : 没出现过,出现过2次,3次,或更多,都不打印。 : 分享给大家,千万别翻成英文。 : 晚上回来跟大家讨论。 : 马上去另一家Onsite了, bless 我吧
|
l*********8 发帖数: 4642 | |
s*********5 发帖数: 514 | 45 Onsite 拿到了,晚些时候给大家发包子。
另外yishan那个算法很不错,我当时没想出来。 |
s*********5 发帖数: 514 | |
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那个算法很不错,我当时没想出来。
|
|
|
y****n 发帖数: 743 | 51 4K Bytes = 32K Bits,每个bit对应一个整数,足够应对1-25000的范围。
原题说能拿到一个数组,而不是文件,把数组里的数字置为负数arr[n]=-arr[n]
通过数字的符号和相应的bit值组合成三种可能:未出现,出现一次,出现多次
【在 d******u 的大作中提到】 : yishan的方法没太明白 : 怎么把第二次出现的数改成负数啊,如果内存只有4k,那这些数肯定装不进内存,要从 : 文件读 : 难道是把文件里面的数置成负数?如果不让改文件呢?
|
a****s 发帖数: 4254 | |
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的这个思路很有趣。好像上次解一道题也是这种思路。不知道是学来的,还是自
己想出来的。 |
|
|
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)
|