algorithm - 将二进制数组分成三部分,使每一部分代表相同的十进制
问题描述
给定一个二进制数组,将数组分成三部分,使每一部分代表相同的十进制。
Eg arr[] = {1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1}
上面的数组可以按以下方式划分:
{1},{0,0,0,0,0,0,0,0,0,0,0,0,0,0,1}, {1}. Now each part represent same decimal.
一种简单的方法是从 1 开始迭代并检查每个小数是否可以将数组分成三个相等的部分。
是否有任何有效的算法。
解决方案
计算设置的位数。如果这个数字不能被三整除,则没有解决方案。说它是,并且有 3k 个设置位。找到第一个、k+1 和 2k+1 个设置位的位置。继续增加所有三个位置并进行比较,直到到达最后一个设置位或出现分歧。如果您在所有三个都同意的情况下到达最后一个设置位,那么您就有了解决方案。
推荐阅读
- java - 如何处理数组类型的Java默认构造函数参数?(没有静态工厂方法或构建器模式)
- angular - 如何在 Angular 8.2.14 中正确使用 ngStyle?
- python - Python - 如何通过 for 循环组合数据帧?
- python - 理解 Python 中的访问器和修改器
- java - 如何将日期字符串转换为 joda DateTime?
- swift - 如何在swift中向textview文本添加两种不同的字体大小
- exchange-server - 获取 DL 的成员
- java - 如何搜索数据库以验证它是否存在?
- arrays - 如何在 Google 表格中的 importxml 公式中定义范围
- swift - 为什么 SKSpriteNode 不能与 SKAction 一起使用?