Easy

题目描述

给你一个整数数组 nums

返回数组中所有偶数的按位或运算结果。

如果 nums 中没有偶数,返回 0

示例 1:

输入:nums = [1,2,3,4,5,6]
输出:6
解释:偶数是 2、4 和 6。它们的按位或运算结果等于 6。

示例 2:

输入:nums = [7,9,11]
输出:0
解释:没有偶数,所以结果是 0。

示例 3:

输入:nums = [1,8,16]
输出:24
解释:偶数是 8 和 16。它们的按位或运算结果等于 24。

提示:

  • 1 <= nums.length <= 100
  • 1 <= nums[i] <= 100

解题思路

这是一道简单的按位运算题目,需要找出数组中的所有偶数并对它们进行按位或运算。

解题思路:

  1. 判断偶数:一个数是偶数当且仅当它能被2整除,即 num % 2 == 0

  2. 按位或运算:按位或运算的特点是,只要某一位上有1,结果的对应位就是1。我们可以用一个变量来累积所有偶数的按位或结果。

  3. 算法步骤

    • 初始化结果变量为0
    • 遍历数组中的每个元素
    • 如果元素是偶数,就与当前结果进行按位或运算
    • 返回最终结果

时间复杂度分析: 需要遍历整个数组一次,所以时间复杂度是O(n)。

空间复杂度分析: 只使用了常数个额外变量,空间复杂度是O(1)。

这道题目直接按照题意模拟即可,没有特别复杂的技巧,重点是正确识别偶数并进行按位或运算。

代码实现

class Solution {
public:
    int evenNumberBitwiseORs(vector<int>& nums) {
        int result = 0;
        for (int num : nums) {
            if (num % 2 == 0) {
                result |= num;
            }
        }
        return result;
    }
};
class Solution:
    def evenNumberBitwiseORs(self, nums: List[int]) -> int:
        result = 0
        for num in nums:
            if num % 2 == 0:
                result |= num
        return result
public class Solution {
    public int EvenNumberBitwiseORs(int[] nums) {
        int result = 0;
        foreach (int num in nums) {
            if (num % 2 == 0) {
                result |= num;
            }
        }
        return result;
    }
}
/**
 * @param {number[]} nums
 * @return {number}
 */
var evenNumberBitwiseORs = function(nums) {
    let result = 0;
    for (let num of nums) {
        if (num % 2 === 0) {
            result |= num;
        }
    }
    return result;
};

复杂度分析

复杂度大O表示法说明
时间复杂度O(n)需要遍历数组中的每个元素一次
空间复杂度O(1)只使用了常数个额外变量