首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >以下情况中的位数

以下情况中的位数
EN

Stack Overflow用户
提问于 2011-12-10 23:21:55
回答 3查看 419关注 0票数 0

我在一次面试中遇到了以下问题,请帮我解决一下,因为我完全不知道该怎么做。

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

编写一个函数:

代码语言:javascript
运行
复制
int bitcount_in_big_octal(const vector<int> &A);

这将返回K的二进制表示中设置为1的位数。如果设置为1的位数超过10,000,000,则该函数应返回-1。

假设数组可以非常大。

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

EN

回答 3

Stack Overflow用户

发布于 2011-12-10 23:32:32

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

票数 2
EN

Stack Overflow用户

发布于 2011-12-10 23:37:02

  1. 在迭代中遍历representation
  2. for-each元素,将表示形式转换为其位数。@meteorgan的答案就是这样做的一个很好的方法。如果你需要比位数更多的表示,你可能会想要将它转换成对你将要使用的任何其他东西有用的中间形式-例如,转换成byte[]:表示中的每个八位数都应该对应于一个byte,因为你所做的一切都是计数位,所以Java的字节是有符号的并不重要。然后对于数组中的每个byte,使用现有的位计数lib,将byte转换为int并使用Integer.bitCount(...),或者滚动您自己的位,等等-要计算位
  3. 将结果添加到运行的总数中,如果达到阈值,则退出迭代。

这在细节上是一个Java答案(就像我链接的库),但是算法步骤对于C++来说是很好的,找到一个替换库(或者使用字典答案)。

票数 0
EN

Stack Overflow用户

发布于 2013-03-26 19:39:20

以下是使用基于索引(字典)的方法的解决方案。

代码语言:javascript
运行
复制
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
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/8457530

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档