C++ 以下情况下的位计数

C++ 以下情况下的位计数,c++,C++,我在一次采访中得到了以下问题,请帮我解决一些问题,因为我完全不知道如何继续 N个元素的非空数组A包含非负整数K的八进制表示,即A的每个元素都属于区间[0;7] 编写一个函数: int bitcount_in_big_octal(const vector<int> &A); int-bitcount\u大八进制(const-vector&A); 返回在二进制表示的K中设置为1的位数。如果设置为1的位数超过10000000,则函数应返回-1 假设阵列可能非常大 假设N是[1.

我在一次采访中得到了以下问题,请帮我解决一些问题,因为我完全不知道如何继续

N个元素的非空数组A包含非负整数K的八进制表示,即A的每个元素都属于区间[0;7]

编写一个函数:

int bitcount_in_big_octal(const vector<int> &A);
int-bitcount\u大八进制(const-vector&A);
返回在二进制表示的K中设置为1的位数。如果设置为1的位数超过10000000,则函数应返回-1

假设阵列可能非常大


假设N是[1..100000]范围内的整数。

有时间限制吗? 我有一个想法:首先,制作以下字典,{0->0,1->1,2->1,3->2,4->1,5->1,6->2,7->3}。然后,使用字典循环数组A,对每个元素中的1求和

  • 迭代您的表示
  • 对于迭代中的每个元素,将表示转换为其位数@梅洛根的回答就是一个很好的方法。如果您需要位计数以外的表示形式,您可能希望将其转换为对您将要使用的其他内容有用的某种中间形式-例如to
    byte[]
    :表示中的每个八位字节都应该对应一个
    字节
    ,因为您所做的只是计算位,所以Java的字节是否有符号并不重要。然后,对于数组中的每个
    字节
    ,使用现有的位计数,将
    字节
    强制转换为
    整数
    ,并使用
    整数.bitCount(…)
    ,或滚动您自己的字节,等等-对位进行计数
  • 将结果添加到运行总数中,如果达到阈值,则退出迭代

    这是一个java的答案,细节(比如链接的LIB),但是C++的算法步骤很好,找到一个替换库(或者使用字典答案)。

    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
    

    到目前为止你试过什么?而且,这是一个C++函数原型,而不是java。