【Java】位运算

来源:互联网 发布:厦门市网络爬虫 编辑:程序博客网 时间:2024/05/22 09:02

数组A包含了0到n的所有整数,但其中缺了一个。在这个问题中,只用一次操作无法取得数组A里某个整数的完整内容。此外,数组A的元素皆以二进制表示,唯一可用的访问操作是“从A[i]取出第j位数据”,该操作时间复杂度为常数。

请编写代码找出那个缺失的整数。你有办法在O(n)时间内完成吗?

找出0到n之间缺失的整数,可以将数字求和在于0到n的数字之和做减法,差值就是缺失的数字

那么怎么求出每个数字呢?由于我们可以去除A[i]的每一位,那么可以将每一位左移j位再相加求和,就得到每个数字的值了。

但这样做的时间是n length(n), length为n的位数,length(n) = log2(n), 时间复杂度是O(nlog2(n)),不是要求的O(n)

0 0
原创粉丝点击