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 <= 1001 <= nums[i] <= 100
解题思路
这是一道简单的按位运算题目,需要找出数组中的所有偶数并对它们进行按位或运算。
解题思路:
判断偶数:一个数是偶数当且仅当它能被2整除,即
num % 2 == 0。按位或运算:按位或运算的特点是,只要某一位上有1,结果的对应位就是1。我们可以用一个变量来累积所有偶数的按位或结果。
算法步骤:
- 初始化结果变量为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) | 只使用了常数个额外变量 |