给你一个整数数组 nums。
数组的 强度 定义为数组中所有元素的 按位或 (Bitwise OR) 。
如果移除某个 子序列 会使剩余数组的 强度严格减少 ,那么该子序列被称为 有效子序列 。
返回数组中 有效子序列 的数量。由于答案可能很大,请返回结果对 109 + 7 取模后的值。
子序列 是一个 非空 数组,它是由另一个数组删除一些(或不删除任何)元素,并且不改变剩余元素的相对顺序得到的。
空数组的按位或为 0。
示例 1:
输入: nums = [1,2,3]
输出: 3
解释:
1 OR 2 OR 3 = 3。[1, 3]:剩余元素 [2] 的按位或为 2。[2, 3]:剩余元素 [1] 的按位或为 1。[1, 2, 3]:剩余元素 [] 的按位或为 0。示例 2:
输入: nums = [7,4,6]
输出: 4
解释:
7 OR 4 OR 6 = 7。[7]:剩余元素 [4, 6] 的按位或为 6。[7, 4]:剩余元素 [6] 的按位或为 6。[7, 6]:剩余元素 [4] 的按位或为 4。[7, 4, 6]:剩余元素 [] 的按位或为 0。示例 3:
输入: nums = [8,8]
输出: 1
解释:
8 OR 8 = 8。[8, 8] 是有效的,因为移除它会使剩余数组为空,按位或为 0。示例 4:
输入: nums = [2,2,1]
输出: 5
解释:
2 OR 2 OR 1 = 3。[1]:剩余元素 [2, 2] 的按位或为 2。[2, 1](包括 nums[0] 和 nums[2]):剩余元素 [2] 的按位或为 2。[2, 1](包括 nums[1] 和 nums[2]):剩余元素 [2] 的按位或为 2。[2, 2]:剩余元素 [1] 的按位或为 1。[2, 2, 1]:剩余元素 [] 的按位或为 0。
提示:
1 <= nums.length <= 1051 <= nums[i] <= 106