Leetcode 3097. Shortest Subarray With OR at Least K II

  • Leetcode 3097. Shortest Subarray With OR at Least K II
    • 1. 解题思路
    • 2. 代码实现
  • 题目链接:3097. Shortest Subarray With OR at Least K II

1. 解题思路

这一题是题目3095的一个进阶版本,但也就是增加了序列的复杂度而已,要求我们能够在 O ( N ) O(N) O(N)的算法复杂度内完成而已。

一个直接的思路就是滑动窗口,我们只需要不断地维护一个滑动窗口即可,逐步移动左边界 i i i,然后维护右边界 j j j使得滑动窗口内的或值始终大于等于 k k k即可。

唯一需要注意的是,由于或操作有叠加效果,因此我们需要记录每一个位上出现的 1 1 1的总的次数,确保删除一个数之后依然可以准确获得后续所有值的或操作结果。

2. 代码实现

给出python代码实现如下:

class Solution:
    def minimumSubarrayLength(self, nums: List[int], k: int) -> int:
        
        def num2digit(num):
            ret = [0 for _ in range(32)]
            idx = 31
            while num > 0:
                ret[idx] = num % 2
                num = num // 2
                idx -= 1
            return ret
        
        def is_greater(digit1, digit2):
            for i in range(32):
                if digit1[i] > 0 and digit2[i] == 0:
                    return True
                elif digit1[i] == 0 and digit2[i] > 0:
                    return False
            return True
        
        i, j, n = 0, 0, len(nums)
        ans = n+1
        dk = num2digit(k)
        digit = [0 for _ in range(32)]
        while i < n:
            while j < n and (j ==i or not is_greater(digit, dk)):
                dj = num2digit(nums[j])
                digit = [x+y for x, y in zip(digit, dj)]
                j += 1
            if is_greater(digit, dk):
                ans = min(ans, j-i)
            else:
                break
            di = num2digit(nums[i])
            digit = [x-y for x, y in zip(digit, di)]
            i += 1
        return ans if ans != n+1 else -1     

提交代码评测得到:耗时3221ms,占用内存38MB。


http://www.niftyadmin.cn/n/5463947.html

相关文章

Docker学习指南

前言 亲爱的读者们&#xff0c;欢迎来到这篇专为“小白”打造的 Docker 学习博客。作为一名运维工程师&#xff0c;我深知初学者在面对 Docker 这样的技术时可能会遇到的困惑与挑战。因此&#xff0c;本文将以浅显易懂的语言、详实的步骤和实用的示例&#xff0c;带领大家从零…

HarmonyOS实战开发-一次开发,多端部署-视频应用

介绍 随着智能设备类型的不断丰富&#xff0c;用户可以在不同的设备上享受同样的服务&#xff0c;但由于设备形态不尽相同&#xff0c;开发者往往需要针对具体设备修改或重构代码&#xff0c;以实现功能完整性和界面美观性的统一。OpenHarmony为开发者提供了“一次开发&#x…

Cocos Creator 常见问题记录

目录 问题1、精灵图九宫格&#xff0c;角度不拉伸 问题2、BlockInputEvents 防止透屏 问题3、代码问题 问题1、精灵图九宫格&#xff0c;角度不拉伸 点击编辑&#xff0c;拖拽到可变区域 问题2、BlockInputEvents 防止透屏 问题3、代码问题 // 不能正常执行var children …

WMware虚拟机配置静态IP

注意&#xff1a;如果是克隆的虚拟机&#xff0c;需要先重新生成mac地址&#xff0c;如下图所示 修改配置文件 &#xff1a;/etc/sysconfig/network-scripts/ifcfg-ens33 注意&#xff1a;1. BOOTPROTO设置为static 2.将下面的IPADDR地址替换为你实际要设置的ip地址 3.NAT模式…

android AndroidAutoSize 取消第三方库适配问题(两个步)

比如第三方库的Activity是&#xff1a;PictureSelectorSupporterActivity、PictureSelectorTransparentActivity、CropImageActivity 1.在自定义Application 的 onCreate 方法设置&#xff1a; Overridepublic void onCreate() {super.onCreate();this.mAppthis;registerActi…

汽车电子行业知识:什么是车联网V2X技术

文章目录 一、V2X是什么?二、V2X功能有哪些?三、V2X的发展现状四、V2X包含哪些技术?五、V2X与哪些领域相关?六、V2X的未来趋势七、有哪些研发V2X技术的公司八、V2X技术应用的困境九、V2X技术应用的需求 自动驾驶、汽车互联等新一代信息技术和汽车产业融合发展已经成为…

4、jvm基础知识(四)

有哪些常见的垃圾回收算法&#xff1f; ⚫1960年John McCarthy发布了第一个GC算法&#xff1a;标记-清除算法。 ⚫1963年Marvin L. Minsky 发布了复制算法。 本质上后续所有的垃圾回收算法&#xff0c;都是在上述两种算法的基础上优化而来。 垃圾回收算法-标记清除算法 标记清…

坚持刷题|分发饼干

文章目录 题目思路代码实现实现总结主要步骤时间复杂度 扩展问题 Hello&#xff0c;大家好&#xff0c;我是阿月。坚持刷题&#xff0c;老年痴呆追不上我&#xff0c;今天刷第一个贪心算法&#xff1a;分发饼干 题目 455.分发饼干 思路 要解决这个问题&#xff0c;可以使用…