给出一个二进制数组,将数组分为三部分,以便每一部分代表相同的小数。
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开始迭代,并检查每个小数点是否可以将数组分为三个相等的部分。
有什么有效的算法吗?
答案 0 :(得分:0)
计数设置的位数。如果这个数字不能被三整除,没有解决方案。说的是,并且有3k个设置位。查找第一个,k + 1和2k + 1个设置位的位置。不断增加所有三个位置并进行比较,直到到达最后一个设置的位或出现分歧为止。如果三个人都同意的话到达最后一个设定位,那么您有解决方案。