网站关键词选取的方法,无极网站建设质量,无极官方网站,男女之间做下面哪个网站免费题目描述#xff1a;
给你一个 非负 整数数组 nums 和一个整数 k 。
如果一个数组中所有元素的按位或运算 OR 的值 至少 为 k #xff0c;那么我们称这个数组是 特别的 。
请你返回 nums 中 最短特别非空 子数组的长度#xff0c;如果特别子数组不存在#xff0c;那么返…
题目描述
给你一个 非负 整数数组 nums 和一个整数 k 。
如果一个数组中所有元素的按位或运算 OR 的值 至少 为 k 那么我们称这个数组是 特别的 。
请你返回 nums 中 最短特别非空 子数组的长度如果特别子数组不存在那么返回 -1 。
代码思路
初始化变量 length数组 nums 的长度。MIN用于记录最短子数组的长度初始值设为 length 1一个不可能达到的长度用于后续判断是否存在符合条件的子数组。l、r分别表示当前考虑的子数组的左右边界左闭右闭。ans用于存储当前右边界 r 及其左侧所有元素的按位或结果。 遍历数组 使用 while 循环遍历数组r 表示当前考察的右边界。在每次循环中更新 ans 为从 l 到 r 的所有元素的按位或结果。如果 ans k则尝试从右向左找到一个最短的子数组使得其按位或结果不小于 k。 内部循环 从 r 到 l-1 向左遍历尝试找到一个最短的满足条件的子数组。使用 temp 和 pre 变量来记录当前和上一个位置的按位或结果。如果找到一个满足条件的子数组更新 MIN、l 和 ans。 结果判断 如果 MIN 仍然是 length 1说明没有找到符合条件的子数组返回 -1。否则返回 MIN。
代码实现
class Solution:def minimumSubarrayLength(self, nums: List[int], k: int) - int:length len(nums)MIN length 1l r ans 0while(r length):ans ans | nums[r]if ans k:temp pre 0for i in range(r, l-1, -1):pre temptemp temp | nums[i]if temp k:MIN min(MIN, r-i1)l i 1ans prebreakr 1if MIN length 1:return -1return MIN