Skip to content

Latest commit

 

History

History
137 lines (96 loc) · 3.07 KB

File metadata and controls

137 lines (96 loc) · 3.07 KB
comments difficulty edit_url tags
true
简单
位运算
数组

English Version

题目描述

给定一个长度为 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)$

Python3

class Solution:
    def orArray(self, nums: List[int]) -> List[int]:
        return [a | b for a, b in pairwise(nums)]

Java

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;
    }
}

C++

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;
    }
};

Go

func orArray(nums []int) (ans []int) {
	for i, x := range nums[1:] {
		ans = append(ans, x|nums[i])
	}
	return
}

TypeScript

function orArray(nums: number[]): number[] {
    return nums.slice(0, -1).map((v, i) => v | nums[i + 1]);
}