我在其中一个访谈中得到了以下问题,请帮我解决一些问题,因为我完全不知道如何继续进行
N个元素的非空数组A包含非负整数K的八进制表示,即A的每个元素属于区间[0; 7]
写一个函数:
int bitcount_in_big_octal(const vector<int> &A);
返回K的二进制表示中设置为1的位数。如果设置为1的位数超过10,000,000,则该函数应返回-1。
假设数组可能非常大。
假设N是[1..100,000]范围内的整数。
答案 0 :(得分:2)
有时间限制吗? 我有一个想法:首先,制作以下字典,{0-> 0,1-> 1,2-> 1,3-> 2,4-> 1,5-> 1,6-> 2,7-> 3}。然后,循环数组A,使用字典对每个元素中的1进行求和。
答案 1 :(得分:0)
byte[]
:表示中的每个八位字节应该对应一个byte
,因为你所做的只是计数位,所以Java的字节是有符号的。然后,对于数组中的每个byte
,使用现有的位计数lib,将byte
强制转换为int
并使用Integer.bitCount(...)
,或者滚动自己的位数等 - 计算位数这是细节中的Java答案(比如我链接的lib),但算法步骤适用于C ++,找到替换库(或使用字典答案)。
答案 2 :(得分:0)
这是使用基于索引(字典)的方法的解决方案。
INDEX = [0, 1, 1, 2, 1, 2, 2, 3]
def bitcount_in_big_octal(A):
counter = 0
for octal in A: counter += INDEX[octal]
return counter