由买买提看人间百态

boards

本页内容为未名空间相应帖子的节选和存档,一周内的贴子最多显示50字,超过一周显示500字 访问原贴
JobHunting版 - 对于一个byte[] 数组,怎么计算比特位会比 O(8n)快?
相关主题
最快的方法看一个int is a power of two请教一道题
分享一道电面题,兼下午Onsite攒人品求祝福Amazon二面结束,求BLESS
检查一个整数是不是2的幂次方的最快方法amazon 一道题
问一道F家的考古题问一题
【含面筋】被某D盒子拒了继续研究数组分段题
贡献一道题给定整数数组和两个整数的和,求所有pair。
关于数组size的问题请问一道面试题
数组里面找数个出现了奇数次的整数,怎么找?求教硬币组合问题
相关话题的讨论汇总
话题: 比特话题: byte话题: 8n话题: br话题: sum
进入JobHunting版参与讨论
1 (共1页)
d********e
发帖数: 321
1
上周被问到一个计算 某正整数的比特位, 比如 3 有2个 比特位,我给秒了
然后被追问,如果输入是一个byte[] array,长度为n,问如何计算数组里全部的比特
位?我说挨个数,然后自然是 O(8n),但是面试小哥说要更快的算法,也就是降低常数
项8,我想不出来了,请问有啥好办法?
我记得lc里有一个是数 1 ... n的连续整数的比特位,但是这题是给的byte[]数组
h*******o
发帖数: 778
2
用空间换时间,用一个256数组存一下每个byte比特位数。
z*********n
发帖数: 1451
3
n -= n & -n 可以消掉最低bit 位,用这个方法可以降低常数项到每个byte平均bit数*
n,
当然最坏还是8n。
r*****s
发帖数: 1815
4
POPCNT
原理应该也是查表


: n -= n

【在 z*********n 的大作中提到】
: n -= n & -n 可以消掉最低bit 位,用这个方法可以降低常数项到每个byte平均bit数*
: n,
: 当然最坏还是8n。

z*********n
发帖数: 1451
5
不查表的话,上个面试不会考的做法,O(lg8n) = O(3n)的:
int main()
{
vector arr = {1,2,3,4,5,6,7,8,9,255};
int sum = 0;
for (auto n : arr)
{
n = (n & 0x55555555U) + ((n >> 1) & 0x55555555U);
n = (n & 0x33333333U) + ((n >> 2) & 0x33333333U);
n = (n & 0x0f0f0f0fU) + ((n >> 4) & 0x0f0f0f0fU);
sum += n;
}
cout< }
r*****s
发帖数: 1815
6
popcnt指令集里没有的时候_mm_popcnt_u32就退化成这个。。


: 不查表的话,上个面试不会考的做法,O(lg8n) = O(3n)的:

: int main()

: {

: vector arr = {1,2,3,4,5,6,7,8,9,255};

: int sum = 0;

: for (auto n : arr)

: {

: n = (n

【在 z*********n 的大作中提到】
: 不查表的话,上个面试不会考的做法,O(lg8n) = O(3n)的:
: int main()
: {
: vector arr = {1,2,3,4,5,6,7,8,9,255};
: int sum = 0;
: for (auto n : arr)
: {
: n = (n & 0x55555555U) + ((n >> 1) & 0x55555555U);
: n = (n & 0x33333333U) + ((n >> 2) & 0x33333333U);
: n = (n & 0x0f0f0f0fU) + ((n >> 4) & 0x0f0f0f0fU);

1 (共1页)
进入JobHunting版参与讨论
相关主题
求教硬币组合问题【含面筋】被某D盒子拒了
amazon面试题目讨论贴贡献一道题
弱问一个150上的10.3题,bit vector的。。。关于数组size的问题
150上的11.3,用1GByte的memory找出4B整数中的missing one数组里面找数个出现了奇数次的整数,怎么找?
最快的方法看一个int is a power of two请教一道题
分享一道电面题,兼下午Onsite攒人品求祝福Amazon二面结束,求BLESS
检查一个整数是不是2的幂次方的最快方法amazon 一道题
问一道F家的考古题问一题
相关话题的讨论汇总
话题: 比特话题: byte话题: 8n话题: br话题: sum