当前位置: 首页 > article >正文

Leetcode3097:或值至少为 K 的最短子数组 II

题目描述:

给你一个 非负 整数数组 nums 和一个整数 k 。

如果一个数组中所有元素的按位或运算 OR 的值 至少 为 k ,那么我们称这个数组是 特别的 。

请你返回 nums 中 最短特别非空 子数组的长度,如果特别子数组不存在,那么返回 -1 。

代码思路:

  1. 初始化变量
    • length:数组 nums 的长度。
    • MIN:用于记录最短子数组的长度,初始值设为 length + 1(一个不可能达到的长度,用于后续判断是否存在符合条件的子数组)。
    • lr:分别表示当前考虑的子数组的左右边界(左闭右闭)。
    • ans:用于存储当前右边界 r 及其左侧所有元素的按位或结果。
  2. 遍历数组
    • 使用 while 循环遍历数组,r 表示当前考察的右边界。
    • 在每次循环中,更新 ans 为从 l 到 r 的所有元素的按位或结果。
    • 如果 ans >= k,则尝试从右向左找到一个最短的子数组,使得其按位或结果不小于 k
  3. 内部循环
    • 从 r 到 l-1 向左遍历,尝试找到一个最短的满足条件的子数组。
    • 使用 temp 和 pre 变量来记录当前和上一个位置的按位或结果。
    • 如果找到一个满足条件的子数组,更新 MINl 和 ans
  4. 结果判断
    • 如果 MIN 仍然是 length + 1,说明没有找到符合条件的子数组,返回 -1
    • 否则,返回 MIN

代码实现:

class Solution:
    def minimumSubarrayLength(self, nums: List[int], k: int) -> int:
        length = len(nums)
        MIN = length + 1
        l = r = ans = 0
        while(r < length):
            ans = ans | nums[r]
            if ans >= k:
                temp = pre = 0
                for i in range(r, l-1, -1):
                    pre = temp
                    temp = temp | nums[i]
                    if temp >= k:
                        MIN = min(MIN, r-i+1)
                        l = i + 1
                        ans = pre
                        break
            r += 1
        if MIN == length + 1:
            return -1
        return MIN

 

 


http://www.kler.cn/a/507979.html

相关文章:

  • 基础入门-反弹Shell渗透命令Reverse反向Bind正向利用语言文件下载多姿势
  • 《汽车维修技师》是什么级别的期刊?是正规期刊吗?能评职称吗?
  • centos 安全配置基线
  • Html5 video标签学习
  • 前端【2】html添加样式、CSS选择器
  • 深度学习中的卷积和反卷积(四)——卷积和反卷积的梯度
  • C 语言运算符的优先级和结合性
  • 解答二重积分
  • 智能化量化模型的前沿探索:中阳的崛起
  • [BrainShadow-V1] VR头戴设备统计报告
  • 分布式系统、微服务、SOA初步理解
  • ubuntu设置代理服务器
  • “深入浅出”系列之设计模式篇:(0)什么是设计模式
  • Objective-C语言的数据类型
  • windows蓝牙驱动开发-BLE音频(一)
  • Linux测试处理fps为30、1920*1080、一分钟的视频性能
  • BGP边界网关协议(Border Gateway Protocol)概念、邻居建立
  • 【西藏乡镇界面】图层arcgis格式shp数据有乡镇名称和编码2020年wgs84坐标内容测评
  • C++/C语言判断重复数组(zznu)⭐
  • Java算法 二叉树入门 力扣简单题相同的树 翻转二叉树 判断对称二叉树 递归求二叉树的层数
  • 刷题记录 回溯算法-16:47. 全排列 II
  • 从玩具到工业控制--51单片机的跨界传奇【3】
  • NLP入门书籍《掌握NLP:从基础到大语言模型》免费下载pdf
  • MySQL的日期时间类型
  • 《汽车维修技师》是什么级别的期刊?是正规期刊吗?能评职称吗?
  • Vue.js组件开发-实现后端返回二进制文件在浏览器自动下载