是否有一种算法可以找到按位或求和或线性时间复杂度的数组?
假设如果数组是 {1,2,3},那么所有对的和 id 为 1|2 + 2|3 + 1|3 = 9。
我可以使用以下算法在 O(n) 中找到所有对 AND 总和....如何更改它以获取所有对 OR 总和。
int ans = 0; // Initialize result
// Traverse over all bits
for (int i = 0; i < 32; i++)
{
// Count number of elements with i'th bit set
int k = 0; // Initialize the count
for (int j = 0; j < n; j++)
if ( (arr[j] & (1 << i)) )
k++;
// There are k set bits, means k(k-1)/2 pairs.
// Every pair adds 2^i to the answer. Therefore,
// we add "2^i * [k*(k-1)/2]" to the answer.
ans += (1<<i) * (k*(k-1)/2);
}
从这里:http ://www.geeksforgeeks.org/calculate-sum-of-bitwise-and-of-all-pairs/