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

LeetCode——2411. 按位或最大的最小子数组长度

通过万岁!!!

  • 题目:给你一个数字nums,里面全是正数,然后让你输入一个数字res,res[i]的值表示nums[i]到nums[i+res[i]]这些值进行按二进制或,可以得到一个最大值。res[i]的值最小,也就是说nums[i+res[i]]右边的那些数组,或不或不影响我的到的这个最大值。
  • 思路:或就是存在1就是1,所以我们尽可能的要找到每个位的1的位置。注意这个数字小于10的9次方,那换成二进制32位就够了。我们应该弄一个二维数组32行,n列。这样就能把n个数都的二进制都用二维数组表示出来。到第i个数的时候,我们要看i这个数以及看右边的数的二进制,哪些能让32位中的某一个能先到1。这肯定能找到很多数字,因为我们有32位么。这些数字的最大的那个,就是右边的界限。右边的界限-i+1就是我们的res[i]了。
  • 进阶思路:我们可以发现,这个比较浪费空间,其实我们用一个132的数组就够了,然后从右边开始往左边走下标设为i。132的数组中,第j个元素存储的是i右边的元素,二进制中,第j位最先为1的下标是多少。这样我们遍历到i的时候,右侧的值我们都在这个1*32的数组中,并且i判断完了以后,把i更新到数组中。这样空间复杂度就降下来了。伪代码binary数组大小为32,初始化为全为0,将nums[i]这个数字转成二进制。然后遍历,遇到第j位为1则binary[j]=i,这样binary[j]中存的就是离i最近的那个第j位是1的数字的下标了。对二进制遍历的时候,每次都要更新下maxIdx,maxIdx = max(maxIdx, binary[j])。maxIdx在每次i的循环中初始化为i或者0即可。
    ● 技巧:滑动窗口、位运算

java代码

class Solution {public int[] smallestSubarrays(int[] nums) {int[] res = new int[nums.length];// binary表示数组中数字转到二进制以后,从右边开始第j个二进制为1的这个数字的下标int[] binary = new int[31];// i表示第几个数字for (int i = nums.length - 1; i >= 0; --i) {int maxIdx = i;int curr = nums[i];for (int j = 0; j < binary.length; ++j) {// 先把自己更新进去if (curr % 2 == 1) {binary[j] = i;}// 已知的为1的最近的数字maxIdx = Math.max(maxIdx, binary[j]);curr /= 2;}res[i] = maxIdx - i + 1;}return res;}
}
  • 总结:题目还是挺有意思的,特别是进阶思路,从右往左循环。
http://www.lryc.cn/news/611403.html

相关文章:

  • MCP与Function Calling
  • MySQL间隙锁在查询时锁定的范围
  • MinIO02-Docker安装
  • AI编程新时代:从氛围编程到上下文编程的深度实践和思考
  • GPS信号捕获尝试(上)
  • 快接龙 | 要如何对用户的接龙频次进行系统硬控
  • MongoDB 从3.4.0升级到4.0.0完整指南实战-优雅草蜻蜓I即时通讯水银版成功升级-卓伊凡|bigniu
  • 【文本左右对齐】
  • 【web自动化测试】实战
  • Python基础框架
  • WebRTC音视频编码模块深度解析:从编解码器到自适应码率控制(2025技术实践)
  • 前端包管理器深度对比
  • 普通树状数组
  • 贪心算法学习 1
  • Zabbix 企业级高级应用
  • 风丘助力混合动力汽车工况测试:精准采集整车信号解决方案
  • VNC连接VirtualBox中的Ubuntu24.04 desktop图形化(GUI)界面
  • 2025年渗透测试面试题总结-01(题目+回答)
  • GitHub Models:为开源AI项目解决推理难题,让AI更易用、更普及
  • css初学者第三天
  • MySQL 如何优化慢查询
  • Redis中的sdshdr的len和alloc那块的知识点详解
  • 前端记录项目中用到的js
  • python可视化--Seaborn图形绘制方法和技巧,Bokeh图形绘制方法和技巧
  • 最新基于Python科研数据可视化实践技术
  • 磁悬浮转子振动控制:主动电磁力如何成为高速旋转的“振动克星”
  • css动态样式
  • 【Git学习】入门与基础
  • Cisco 3750X交换机更新到IOS 15.2后无法启动 提示:Boot process failed...
  • Laravel The requested URL /hellowzy was not found on this server. 404 问题的解决