2026-02-16:偶数的按位或运算。用go语言,输入一个整数数组 nums,计算数组中所有能被2整除的元素的位或(bitwi

举报
福大大架构师每日一题 发表于 2026/02/16 18:47:16 2026/02/16
【摘要】 2026-02-16:偶数的按位或运算。用go语言,输入一个整数数组 nums,计算数组中所有能被2整除的元素的位或(bitwise OR)结果;如果数组中没有符合条件的元素,则返回 0。简单思路:用一个累加变量(初始为 0),遍历 nums,遇到能被2整除的数就与累加变量做位或,遍历结束后返回该累加值(若从未有过这样的数则仍为 0)。1 <= nums.length <= 100。1 <=...

2026-02-16:偶数的按位或运算。用go语言,输入一个整数数组 nums,计算数组中所有能被2整除的元素的位或(bitwise OR)结果;如果数组中没有符合条件的元素,则返回 0。

简单思路:用一个累加变量(初始为 0),遍历 nums,遇到能被2整除的数就与累加变量做位或,遍历结束后返回该累加值(若从未有过这样的数则仍为 0)。

1 <= nums.length <= 100。

1 <= nums[i] <= 100。

输入: nums = [1,8,16]。

输出: 24。

解释:

偶数为 8 和 16。它们的按位或运算结果是 24。

题目来自力扣3688。

大体过程:

  1. 初始化一个累加变量 ans,将其值设为 0,用于存储最终的按位或结果。
  2. 遍历整数数组 nums 中的每一个元素 x:
    • 检查当前元素 x 是否能被 2 整除(即判断 x % 2 == 0 是否成立)
    • 如果 x 是偶数,则将当前元素 x 与累加变量 ans 进行按位或运算(ans |= x),并将结果更新到 ans 中
    • 如果 x 是奇数,则跳过该元素,不对 ans 做任何操作
  3. 遍历完数组中所有元素后,返回累加变量 ans 的值
    • 如果数组中有偶数元素,ans 就是这些偶数元素按位或的结果
    • 如果数组中没有偶数元素,ans 保持初始值 0,返回 0

针对示例 nums = [1, 8, 16] 的具体执行过程:

  • 初始 ans = 0
  • 遍历第一个元素 x = 1:1 % 2 ≠ 0,不是偶数,跳过
  • 遍历第二个元素 x = 8:8 % 2 = 0,是偶数,执行 ans |= 8,即 0 | 8 = 8,ans 更新为 8
  • 遍历第三个元素 x = 16:16 % 2 = 0,是偶数,执行 ans |= 16,即 8 | 16 = 24,ans 更新为 24
  • 遍历结束,返回 ans = 24

复杂度分析:

  • 时间复杂度: O(n),其中 n 是数组 nums 的长度。因为只需要对数组进行一次线性遍历,每个元素只做常数时间的判断和可能的位运算操作。
  • 空间复杂度: O(1),只使用了一个额外的变量 ans 来存储结果,不随输入规模变化。

Go完整代码如下:

package main

import (
	"fmt"
)

func evenNumberBitwiseORs(nums []int) (ans int) {
	for _, x := range nums {
		if x%2 == 0 {
			ans |= x
		}
	}
	return
}

func main() {
	nums := []int{1, 8, 16}
	result := evenNumberBitwiseORs(nums)
	fmt.Println(result)
}

在这里插入图片描述

Python完整代码如下:

# -*-coding:utf-8-*-

def evenNumberBitwiseORs(nums):
    ans = 0
    for x in nums:
        if x % 2 == 0:
            ans |= x
    return ans

def main():
    nums = [1, 8, 16]
    result = evenNumberBitwiseORs(nums)
    print(result)

if __name__ == "__main__":
    main()

在这里插入图片描述

C++完整代码如下:

#include <iostream>
#include <vector>

int evenNumberBitwiseORs(const std::vector<int>& nums) {
    int ans = 0;
    for (int x : nums) {
        if (x % 2 == 0) {
            ans |= x;
        }
    }
    return ans;
}

int main() {
    std::vector<int> nums = {1, 8, 16};
    int result = evenNumberBitwiseORs(nums);
    std::cout << result << std::endl;
    return 0;
}

在这里插入图片描述

【声明】本内容来自华为云开发者社区博主,不代表华为云及华为云开发者社区的观点和立场。转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息,否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。