zen*_*gal 3 bit-shift bitwise-operators
我遇到了这样一个编程面试问题.但对我来说,如何知道如何在这里使用位移是不明显的.有人好心解释.谢谢.
数组的大小为N,整数在0到1024之间(允许重复).另一个整数数组的大小为M,对数字没有限制.查找第一个数组中哪些元素存在于第二个数组中.(如果您正在使用额外的内存,请考虑使用按位运算符来最小化它)
我想知道现实世界中的bitshift运算符是什么意思.以及如何识别需要比特移位方法的问题.
谢谢桑杰
这真是一个非常简单的面试问题.因为您知道第一组中最多有1025个不同的整数,所以您可以使用该位数来表示在输入集中是否找到每个数字.因此,如果您希望答案只打印一次不同的数字,那么逻辑是:
现在,创建一个1025位的位集可能不会被您的语言直接支持,因此您有时需要做的是使用一个字节数组,每个字节都有8位.然后,假设您要设置位"k",您将在索引k/8处找到该字节,然后将该位设置为位置k%8.要执行后者,您必须从位位置转换(0到7)到位值(位0表示值1,位1值2,位2值4 ...位7值128 - 所有2的幂).要获得这些值,可以取数字1并将其保留在"位置"位置.所以,1 << 0仍然是1,而1 << 7是128.你可以:
if (array[k / 8] & (1 << (k % 8))) ...it's on...array[k / 8] |= (1 << (k % 8));如果在任何一组中碰巧有少于1025个值,那么有更有效的方法可以做到这一点,但这是一个很好的通用解决方案.
| 归档时间: |
|
| 查看次数: |
1863 次 |
| 最近记录: |