我在一次面试中遇到了以下问题,请帮我解决一下,因为我完全不知道该怎么做。
N个元素的非空数组A包含非负整数K的八进制表示,即A的每个元素属于区间0;7
编写一个函数:
int bitcount_in_big_octal(const vector<int> &A);这将返回K的二进制表示中设置为1的位数。如果设置为1的位数超过10,000,000,则该函数应返回-1。
假设数组可以非常大。
假设N是1..100000范围内的整数。
发布于 2011-12-10 23:32:32
有时间限制吗?我有一个想法:首先,制作如下字典:{0->0,1->1,2->1,3-> 2,4->1,5->1,6->2,7->3}。然后,循环数组A以使用字典对每个元素中的1求和。
发布于 2011-12-10 23:37:02
byte[]:表示中的每个八位数都应该对应于一个byte,因为你所做的一切都是计数位,所以Java的字节是有符号的并不重要。然后对于数组中的每个byte,使用现有的位计数lib,将byte转换为int并使用Integer.bitCount(...),或者滚动您自己的位,等等-要计算位这在细节上是一个Java答案(就像我链接的库),但是算法步骤对于C++来说是很好的,找到一个替换库(或者使用字典答案)。
发布于 2013-03-26 19:39:20
以下是使用基于索引(字典)的方法的解决方案。
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 counterhttps://stackoverflow.com/questions/8457530
复制相似问题