news 2026/6/9 20:15:05

最长优雅子数组

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
最长优雅子数组

2401. 最长优雅子数组 - 力扣(LeetCode)来源于题解,有自己的解读

class Solution { public: int longestNiceSubarray(vector<int>& nums) { //滑动窗口去做 int ans=0,left=0,or_=0;//or_保存最优子序列中所有数据的二进制位为1的最终组合 //right去遍历数组 for(int right=0;right<nums.size();right++) { //&后不为0,去掉左边界(异或:相同抵消) while(or_&nums[right])//用while而不是if:固定当前右边界,从左到右依次去看应该把最优子数组里面的哪些元素去掉 { or_^=nums[left++]; } //&后为0,把nums[right]加入or_中 or_|=nums[right]; ans=max(ans,right-left+1); } return ans; } };

1、考察:滑动窗口 + 位运算

2、这段代码用滑动窗口(双指针)维护一个「始终满足优美条件」的窗口[left, right],并用一个变量or_记录窗口内所有数的「二进制 1 的集合」or_的某一位为 1,说明窗口内有数字的这一位是 1)。

操作含义举例
or_ & nums[right]判断 nums [right] 和窗口内的数是否有重叠的 1:- 结果≠0 → 有重叠(窗口不满足优美条件);- 结果 = 0 → 无重叠(可以加入窗口)假设 or_=011(窗口内有 1、2),nums [right]=4(100):011 & 100 = 0 → 无重叠;若 nums [right]=2(010):011 & 010 = 010≠0 → 有重叠
`or_= nums[right]`把 nums [right] 的 1 加入 or_(标记窗口内新增的 1 的位置)or_=011,nums[right]=4(100):011 | 100 = 111 → or_更新为 111
or_ ^= nums[left]从 or_中移除 nums [left] 的 1(窗口左边界收缩,去掉该数的 1)前提:窗口内每个数的 1 都是唯一的(否则不能用异或),比如 or_=111,nums [left]=2(010):111 ^ 010 = 101 → or_去掉了 010 这一位

完整执行示例(nums = [1,3,8,48,10])

3、核心操作重用:高(&/|/^ 是位运算的基础,面试常考):

  • x & 1:判断奇偶;
  • x ^ x = 0:找唯一数;
  • x | y:合并状态;
  • x & (x-1):消除最后一个 1(比如统计 1 的个数)。

4、总结

(1)代码核心:滑动窗口维护优美子数组,or_记录窗口内 1 的集合,用 & 判断重叠、| 添加、^ 移除;

(2)位运算关键:or_ & nums[right]≠0说明有重叠,需收缩左边界;

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/6/10 1:12:31

QRZ自动上传通联日志:业余无线电数字化转型的效率革命

QRZ自动上传通联日志&#xff1a;业余无线电数字化转型的效率革命 【免费下载链接】FT8CN Run FT8 on Android 项目地址: https://gitcode.com/gh_mirrors/ft/FT8CN 一、问题引入&#xff1a;传统通联日志管理的效率瓶颈 业余无线电操作者在完成通联后&#xff0c;面临…

作者头像 李华
网站建设 2026/6/10 11:23:16

GTA5游戏辅助工具安全使用指南:YimMenu全面技术手册

GTA5游戏辅助工具安全使用指南&#xff1a;YimMenu全面技术手册 【免费下载链接】YimMenu YimMenu, a GTA V menu protecting against a wide ranges of the public crashes and improving the overall experience. 项目地址: https://gitcode.com/GitHub_Trending/yi/YimMen…

作者头像 李华
网站建设 2026/6/1 0:39:17

Qwen2.5-1.5B保姆级部署指南:RTX3090/4090/笔记本MX系列全适配说明

Qwen2.5-1.5B保姆级部署指南&#xff1a;RTX3090/4090/笔记本MX系列全适配说明 1. 项目概述 Qwen2.5-1.5B是基于阿里通义千问官方轻量级大语言模型构建的本地智能对话助手。这个项目实现了完全本地化部署的纯文本智能对话服务&#xff0c;使用Streamlit打造了简洁易用的可视化…

作者头像 李华
网站建设 2026/6/10 11:24:05

Whisper-large-v3开源可部署:基于HuggingFace模型的全栈语音识别方案

Whisper-large-v3开源可部署&#xff1a;基于HuggingFace模型的全栈语音识别方案 1. 项目概述 Whisper-large-v3是OpenAI开源的强大语音识别模型&#xff0c;支持99种语言的自动检测与转录。本文将带您从零开始部署这个1.5B参数的大模型&#xff0c;构建一个完整的语音识别We…

作者头像 李华
网站建设 2026/6/1 12:48:54

文件伪装技术全指南:突破限制与保护隐私的实用方法

文件伪装技术全指南&#xff1a;突破限制与保护隐私的实用方法 【免费下载链接】apate 简洁、快速地对文件进行格式伪装 项目地址: https://gitcode.com/gh_mirrors/apa/apate 1. 为什么文件伪装成为现代办公必备技能 在数字化办公环境中&#xff0c;我们经常面临各种文…

作者头像 李华
网站建设 2026/6/5 22:40:25

安卓基础之《(19)—高级控件(1)下拉列表》

一、下拉框Spinner 1、Spinner用于从一串列表中选择某项&#xff0c;功能类似于单选按钮的组合 2、android:spinnerMode属性&#xff0c;有两个选项 &#xff08;1&#xff09;dropdown为下拉菜单 &#xff08;2&#xff09;dialog为弹窗显示菜单 &#xff08;3&#xff09;不…

作者头像 李华