给出一个数字,如何识别它是否有些黯淡或有效支持某些数字?
给定一组数字,如何有效地检查是否支持每个数字 如果阵列中不支持数组或暗淡?
蛮力:找到二进制等效值,计数数为1并在数组中搜索它。
关于Bleak和支持的数字:
对于每个数字,计算其自己的二进制表示中的1的数量,并将此计数添加到自身以获取它支持的数字的值。也就是说,如果j是m的二进制表示中的1的个数,则m支持m + j。
实施例:number eight (1000 in binary) supports nine, whereas nine supports eleven.
然而,通过这种方式,并非所有数字都得到支持;有些人没有得到支持,这些数字被称为暗淡。例如,因为一个支持两个,两个支持三个和三个支持五个,没有少于四个,这将支持四个,所以四个是暗淡的。
答案 0 :(得分:1)
如果n
不是暗淡的,则必须使用n-ceil(log2(n))
到n-1
范围内的数字来支持{{1}}。这给你一个非常小的范围,你必须检查。对于数组,首先使用相同的原理对数组进行排序,这样可以为您提供有效的解决方案。
答案 1 :(得分:0)
将a
表示为给定数组,将count(x)
表示为x中的1位数。
问题2:
a[i] + count(a[i])
保存到二叉搜索树中。时间:O(n log n)注意:a [i]是迭代时的当前元素。