package main
import (
"fmt"
)
func main() {
// 假设这是非常大的uint64类型数组,这里简单模拟
largeArray := []uint64{0, 0, 1, 0, 2, 0, 0}
result := bitwiseOrLargeArray(largeArray)
fmt.Println(result)
}
func bitwiseOrLargeArray(arr []uint64) uint64 {
var result uint64
for _, num := range arr {
if num != 0 {
result |= num
}
}
return result
}
优化思路
- 空间复杂度:由于数组本身已经给定,这里没有额外开辟与数组规模相关的空间,仅使用了一个
result
变量来存储最终结果,因此空间复杂度为 $O(1)$。
- 时间复杂度:正常遍历数组进行按位或操作时间复杂度是 $O(n)$,这里通过跳过值为0的元素,在大部分元素为0的情况下,实际遍历的元素数量会远小于数组长度
n
,从而在时间上获得优化,但最坏情况下时间复杂度仍为 $O(n)$。这种优化减少了不必要的按位或操作,提高了整体效率。