跳转至

3173. 相邻元素的按位或 🔒

题目描述

给定一个长度为 n 的数组 nums,返回一个长度为 n - 1 的数组 answer 使得 answer[i] = nums[i] | nums[i + 1],其中 | 表示按位 OR 操作。

 

示例 1:

输入:nums = [1,3,7,15]

输出:[3,7,15]

 

示例 2:

输入:nums = [8,4,2]

输出:[12,6]

 

示例 3:

输入:nums = [5,4,9,11]

输出:[5,13,11]

 

提示:

  • 2 <= nums.length <= 100
  • 0 <= nums[i] <= 100

解法

方法一:遍历

我们遍历数组的前 $n - 1$ 个元素,对于每个元素,计算它和它的下一个元素的按位或值,将结果存入答案数组中。

时间复杂度 $O(n)$,其中 $n$ 是数组的长度。忽略答案数组的空间消耗,空间复杂度 $O(1)$。

1
2
3
class Solution:
    def orArray(self, nums: List[int]) -> List[int]:
        return [a | b for a, b in pairwise(nums)]
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
class Solution {
    public int[] orArray(int[] nums) {
        int n = nums.length;
        int[] ans = new int[n - 1];
        for (int i = 0; i < n - 1; ++i) {
            ans[i] = nums[i] | nums[i + 1];
        }
        return ans;
    }
}
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
class Solution {
public:
    vector<int> orArray(vector<int>& nums) {
        int n = nums.size();
        vector<int> ans(n - 1);
        for (int i = 0; i < n - 1; ++i) {
            ans[i] = nums[i] | nums[i + 1];
        }
        return ans;
    }
};
1
2
3
4
5
6
func orArray(nums []int) (ans []int) {
    for i, x := range nums[1:] {
        ans = append(ans, x|nums[i])
    }
    return
}
1
2
3
function orArray(nums: number[]): number[] {
    return nums.slice(0, -1).map((v, i) => v | nums[i + 1]);
}

评论