您的位置:首页 > 编程语言 > Java开发

【Java】位运算

2015-07-15 10:49 411 查看
数组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)
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: