![]() |
1
18
在extractBit中,如果你先移位,你可以用
在第二个函数中,我断言
|
![]() |
2
5
查表? |
![]() |
3
3
另一种是在比特范围内进行的:
像
|
![]() |
4
3
您可以通过先向右移动,然后屏蔽位来加速第一个功能:
这样可以节省一次操作。
关于第二个问题,我假设
当然,您必须像在代码中一样小心范围。
编辑:如果你想
|
![]() |
5
0
|
![]() |
6
-3
如果你想更快,你可以使用一个查找表。我猜这就是面试官想要的(作为“我怎样才能让面试更快”的最终答案)。 基本上,这意味着您需要提前创建一个巨大的表,将所有可能的参数组合映射到正确的结果。例如,你会有:
显然,这需要放入有效的c数据结构(数组,按字节和位置索引)。这将允许您在函数中根据所选的索引方案返回数组中的一个位置。 对于第一个函数, 这不会占用太多内存。我们说的是一个字节的值(一个字节可以有256个不同的值)乘以8个可能的起始位置值,这构成了一个2048的数组。 对于第二个函数, 这实际上会占用更多的空间。您需要将起始位置和结束位置的所有可能值相乘256倍(请记住,起始位置和结束位置存在非法组合)。 我猜面试官只是想让你回答,这将是一种加快面试速度的方法,然后提供上述想法,试图估算这将花费多少空间和节省多少时间。 |
![]() |
giantjenga · 优化整数向量到二进制向量的转换 9 月前 |
![]() |
Daniel Lobo · 使用约束进行优化 9 月前 |
![]() |
Sergio · python中大量数字的乘法 1 年前 |
![]() |
Sergey Dev · 临时表与表变量 1 年前 |
![]() |
John · 减少C中的内存消耗++ 1 年前 |