以有效的方式检查数字是否暗淡或支持

时间:2014-09-13 17:30:23

标签: c arrays algorithm data-structures

  1. 给出一个数字,如何识别它是否有些黯淡或有效支持某些数字?

  2. 给定一组数字,如何有效地检查是否支持每个数字 如果阵列中不支持数组或暗淡?

  3. 蛮力:找到二进制等效值,计数数为1并在数组中搜索它。

    关于Bleak和支持的数字:

    对于每个数字,计算其自己的二进制表示中的1的数量,并将此计数添加到自身以获取它支持的数字的值。也就是说,如果j是m的二进制表示中的1的个数,则m支持m + j。

    实施例:number eight (1000 in binary) supports nine, whereas nine supports eleven.

    然而,通过这种方式,并非所有数字都得到支持;有些人没有得到支持,这些数字被称为暗淡。例如,因为一个支持两个,两个支持三个和三个支持五个,没有少于四个,这将支持四个,所以四个是暗淡的。

2 个答案:

答案 0 :(得分:1)

如果n不是暗淡的,则必须使用n-ceil(log2(n))n-1范围内的数字来支持{{1}}。这给你一个非常小的范围,你必须检查。对于数组,首先使用相同的原理对数组进行排序,这样可以为您提供有效的解决方案。

答案 1 :(得分:0)

a表示为给定数组,将count(x)表示为x中的1位数。

问题2:

  1. 遍历数组并将数字a[i] + count(a[i])保存到二叉搜索树中。时间:O(n log n)
  2. 如果[i]在二叉搜索树中,则迭代数组并输出“Supported”,否则输出“Bleak”。时间:O(n log n)
  3. 注意:a [i]是迭代时的当前元素。