首页 > 其他分享 >滑动窗口+位运算

滑动窗口+位运算

时间:2025-01-17 23:22:07浏览次数:1  
标签:right 窗口 运算 int res ++ 滑动 bits left

Problem:

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

思路

终究还是用到了滑动窗口,暴力枚举在上一题点击查看

Code

class Solution {
    public int minimumSubarrayLength(int[] nums, int k) {
        int n = nums.length;
		//用数组去模拟当前或的结果的各位对应1的个数,依据题目范围,30足以模拟
        int[] bits = new int[30];
        int res = Integer.MAX_VALUE;
		//滑动窗口,right一点一点向右移动,直到满足题目中“特别”的要求
        for (int left = 0, right = 0; right < n; right++) {
			//更新各位1的个数
            for (int i = 0; i < 30; i++) {
                bits[i] += (nums[right] >> i) & 1;
            }
			//满足要求后,及时维护res结果,同时left左移查看时候用更短的数组,指导不符合要求,就继续外层for循环
            while (left <= right && calc(bits) >= k) {
                res = Math.min(res, right - left + 1);
				//更新各位1的个数
                for (int i = 0; i < 30; i++) {
                    bits[i] -= (nums[left] >> i) & 1;
                }
                left++;
            }
        }

        return res == Integer.MAX_VALUE ? -1 : res;
    }
	//计算对应数值
    private int calc(int[] bits) {
        int ans = 0;
        for (int i = 0; i < bits.length; i++) {
            if (bits[i] > 0) {
                ans |= 1 << i;
            }
        }
        return ans;
    }
}

标签:right,窗口,运算,int,res,++,滑动,bits,left
From: https://www.cnblogs.com/arioya/p/18677813

相关文章

  • [rustGUI][iced]基于rust的GUI库iced(0.13)的部件学习(04):实现窗口主题(颜色)变换(暨menu菜单
    前言本文是关于iced库的部件介绍,iced库是基于rust的GUI库,作者自述是受Elm启发。iced目前的版本是0.13.1,相较于此前的0.12版本,有较大改动。本合集是基于新版本的关于分部件(widget)的使用介绍,包括源代码介绍、实例使用等。环境配置系统:window10平台:visualstudiocode语言:rust......
  • 位运算练习
    判断字符是否唯一面试题01.01.判定字符是否唯一-力扣(LeetCode)思路此题可以用位运算解决,我们这里使用位图。位图:即定义一个数字将其转换为32个二进制位,将其初始化为0,每个字母代表一位,判断每个位置是否为1,如果为0,则将其加一(相当于记录此位置存在一种字母);如果为1,则之前这......
  • 按位或运算
    Problem:3095.或值至少K的最短子数组I思路用枚举子数组的方法,暴力Codeclass Solution {    public int minimumSubarrayLength(int[] nums, int k) {        int count = 60;        int n = nums.length;        boolean......
  • 字玩FontPlayer开发笔记10 Tauri2多窗口通信
    字玩FontPlayer开发笔记10Tauri2多窗口通信字玩FontPlayer是笔者开源的一款字体设计工具,使用Vue3+ElementUI开发,源代码:github|gitee笔记最近在使用Tauri进行打包应用,这两天在测试可编程脚本模块时,发现原有代码使用了window.open方法,在Tauri应用中一直触发不了新窗口......
  • 东软云医院HIS系统-药房管理系统【Swing窗口+MySQL】(Java课设)
         客官进来看一眼呗,有惊喜!【帮你解决烦恼】:Java课设和计Java毕设太难不会做怎么办?系统类型Swing窗口类型+Mysql数据库存储数据使用范围适合作为Java课设!!!部署环境jdk1.8+Mysql8.0+Idea或eclipse+jdbc运行效果本系统源码地址:东软云医院HIS系统-药房管理系统【Sw......
  • 递归——用最少的代码完成复杂的运算-函数(中)
    前言:上期我们介绍了函数的概念,库函数,自定义函数等等,这期我们来介绍一下函数的嵌套调用,链式访问,和函数递归。传送门:上一篇文章在这里函数上一,函数的嵌套调用听到函数嵌套不知你是否会想起,条件嵌套,和循环嵌套;条件嵌套:是多个条件语句比如说多个if语句嵌套在一起;循环嵌套:是多......
  • 【LeetCode 刷题】数组-滑动窗口
    此博客为《代码随想录》数组章节的学习笔记,主要内容为滑动窗口知识点的相关题目解析。文章目录209.长度最小的子数组904.水果成篮76.最小覆盖子串209.长度最小的子数组题目链接classSolution:defminSubArrayLen(self,target:int,nums:List[int])->......
  • 页宏 窗口宏 符号宏
    EPLAN中的宏分为三类:页宏(*.emp),窗口宏(*.ema),符号宏(*.ems)注:EPLAN中对窗口宏和符号宏没有做明显的区分,只是后缀不太一样;一,如何创建页宏?(1)选中某一页右击\创建页宏\     2,插入页宏:      3,如何插入窗口宏:   ......
  • 分别封装精确运算的加减乘除四个方法
    在前端开发中,进行精确的加减乘除运算通常是因为JavaScript的浮点数运算存在精度问题。为了解决这个问题,可以使用一些库,如decimal.js或big.js,或者手动实现这些方法。以下是一个简单的示例,使用JavaScript手动封装精确的加减乘除四个方法:/***精确加法*@param{number}num1......
  • 运算放大器应用电路设计笔记(一)
    1.1何谓运算放大器1.1.1运算放大器的诞生运算放大器简称OP,于20世纪40年代作为模拟计算机功能元件开发出来。要进行加减乘除的原始运算甚至微积分运算,只需在放大器中施加特殊的负反馈就可进行运算。1.1.2作为理想元件处理电路符号用三角形表示,左端为两个输入端,右端为输出端......