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

LeetCode:3097. 或值至少为 K 的最短子数组 II(滑动窗口 Java)

目录

3097. 或值至少为 K 的最短子数组 II

题目描述:

实现代码与解析:

滑动窗口

原理思路:


3097. 或值至少为 K 的最短子数组 II

题目描述:

给你一个 非负 整数数组 nums 和一个整数 k 。如果一个数组中所有元素的按位或运算 OR 的值 至少 为 k ,那么我们称这个数组是 特别的 。请你返回 nums 中 最短特别非空 子数组的长度,如果特别子数组不存在,那么返回 -1 。

示例 1:

输入:nums = [1,2,3], k = 2

输出:1

解释:子数组 [3] 的按位 OR 值为 3 ,所以我们返回 1 。

示例 2:

输入:nums = [2,1,8], k = 10

输出:3

解释:子数组 [2,1,8] 的按位 OR 值为 11 ,所以我们返回 3 。

示例 3:

输入:nums = [1,2], k = 0

输出:1

解释:子数组 [1] 的按位 OR 值为 1 ,所以我们返回 1 。

提示:

  • 1 <= nums.length <= 2 * 105
  • 0 <= nums[i] <= 109
  • 0 <= k <= 109

实现代码与解析:

滑动窗口

class Solution {
    public int minimumSubarrayLength(int[] nums, int k) {
                
        int res = Integer.MAX_VALUE;
        int l = 0, r = 0;
        int cur = 0;
        int n = nums.length;
        int tmp = 0;
        for (; r < n; r++) {
            cur |= nums[r];
            while (l <= r && (nums[l] | cur) >= k) {
                res = Math.min(res, r - l + 1);
                l++;
                if (tmp < l) {
                    for (int i = r - 1; i >= l; i--) {
                        nums[i] |= nums[i + 1];
                    }
                    tmp = r;
                    cur = 0;
                }

            }
        }
        return res == Integer.MAX_VALUE ? -1 : res;
    }
    
}

原理思路:

        因为|运算不可逆,所以不能像+-一样处理,l指针移动之后,需要获取当前当前子数组中的|运算值。用栈逆向存储一下,这里直接放在原数组里了。


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

相关文章:

  • YOLO目标检测1
  • SQL刷题快速入门(三)
  • 音频入门(一):音频基础知识与分类的基本流程
  • 【Prometheus】PromQL进阶用法
  • React Context 实现全局组件注册
  • 【NLP基础】Word2Vec 中 CBOW 指什么?
  • element UI的日期选择器固定日期变色
  • GD32F303 GCC 环境搭建
  • 2025展望:“安全计算”平价时代加速到来,数据流通产业兴起
  • 期权懂|你了解场内期权和场外期权的区别吗?
  • Windows 服务程序实现鼠标模拟
  • 【头歌】Scrapy爬虫(二)热门网站数据爬取
  • 【Vim Masterclass 笔记22】S09L40 + L41:同步练习11:Vim 的配置与 vimrc 文件的相关操作(含点评课内容)
  • 【2024 博客之星评选】请继续保持Passion
  • EXCEL+Python搞定数据处理(第一部分:Python入门-第2章:开发环境)
  • C语言程序设计十大排序—冒泡排序
  • vim文本编辑器
  • Leetcode:2239
  • 卸载和安装Git小乌龟、git基本命令
  • npm install 报错:Command failed: git checkout 2.2.0-c
  • 自然语言处理(NLP)领域相关模型概述
  • MOS怎样选型,步骤详解
  • 20250119面试鸭特训营第27天
  • python学opencv|读取图像(四十)掩模:三通道图像的局部覆盖
  • Python----Python高级(正则表达式:语法规则,re库)
  • 到华为考场考HCIE的注意事项和考试流程