news 2026/4/23 14:07:31

A.每日一题——3314.构造最小位运算数组I+3315.构造最小位运算数组II

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
A.每日一题——3314.构造最小位运算数组I+3315.构造最小位运算数组II

题目链接:3314. 构造最小位运算数组 I(简单)

3315. 构造最小位运算数组 II(简单)

算法原理:

解法一:暴力枚举

4ms击败30.43%

时间复杂度O(N∗M)

思路很简单,先来一层for循环遍历链表中的每个质数,再针对每个质数再来一层for循环,因为“|”运算的性质就是只要有1,结果就是1,所以 i | (i+1)的结果一定>=i+1,所以内层for循环从0遍历到x-1,逐步试探,只要有符合的,就加入到返回数组ret中,然后立刻break,防止多添,如果没有找到,就把-1加入返回数组即可

解法二:位运算

1ms击败100.00%

时间复杂度O(N)

想要降低时间复杂度就要观察题目的例子,总结出规律再对症下药

举个例子:x=100111时,x | (x+1)=100111 | 101000=101111

x和x+1必然是一奇一偶,那么上述的式子其实就是把二进制最右边的0改成了1,且这个 0右边都是1,在上述例子中0的位置在从左往右数第3个数

反过来,在 x | (x+1)=101111的情况下倒推x,需要把右边四个1的某个1变成0,

满足要求的x有:100111、101011、101101、101110,这些都是符合条件的,挑出其中最小的是 100111,也就是把101111最右边的0的右边的1置为0

那么我们现在的目标就是找到nums[i]最右边的0的右边的1,如何找到呢?

先找到最右边的0,然后>>1就是最右边的1了,如何找到最右边的0呢?

①第一个方向:

既然要找到这个0,那么就是提取出它,在位运算中,提取常常使用按位与&

把101111+1得到110000,再把101111按位取反~得到010000,这两个结果按位与&恰好得到lowbit=10000

②第二个方向:

找到这个0也可以用异或^提取,咱们要找的是最右侧的0,首先明确,找最右侧的1的式子是n&-n,那么我们可以通过对原数取反,将最右侧的1转化为最右侧的0,进而使用这个式子

这个式子可参考下面这篇博客👇

优选算法-位运算:33.判断字符是否唯一

把x=101111按位取反~得到 t=~x=010000,通过 t &-t 得到lowbit=10000

JAVA代码:

class Solution { //解法一:暴力解法 public int[] minBitwiseArray(List<Integer> nums) { int[] ret=new int[nums.size()]; int index=0; //遍历每个质数 for(int x:nums){ //获取一下加入之前的index位置 int tmp=index; for(int i=0;i<x;i++) if((i|(i+1))==x){ ret[index++]=i; break;//找到一个最小的立马弹出 } //如果没找到就添加-1 if(index==tmp) ret[index++]=-1; } return ret; } }
class Solution { //解法二:位运算 public int[] minBitwiseArray(List<Integer> nums) { int[] ret=new int[nums.size()]; int index=0; for(int x:nums){ if(x==2) ret[index++]=-1; else{ //写法一 //int lowbit=(x+1)&~x; //写法二 int lowbit=(~x)&-(~x); ret[index++]=x^(lowbit>>1); } } return ret; } }
版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/4/19 9:49:49

HBuilder X 运行小程序时微信开发者工具没有自动打开mp-weixin文件夹[ app.json 文件内容错误] app.json: 在项目根目录未找到 app.json

HBuilderX 运行小程序时&#xff0c;微信开发者工具提示 app.json 文件内容错误且在项目根目录未找到 app.json。 问题定位 这个报错的本质是&#xff1a;微信开发者工具尝试加载的目录里&#xff0c;没有找到小程序必需的 app.json 文件。可能的原因包括&#xff1a; HBuilder…

作者头像 李华
网站建设 2026/4/17 14:16:13

MedPlan:基于两阶段RAG的个性化医疗AI系统实战案例

MedPlan是基于两阶段RAG的个性化医疗方案生成系统&#xff0c;采用SOAP临床推理流程&#xff1a;第一阶段基于患者主观(S)和客观(O)信息生成评估(A)&#xff0c;第二阶段基于评估和原始信息生成方案。系统整合患者历史记录和相似病例参考&#xff0c;通过两步检索机制提升准确性…

作者头像 李华
网站建设 2026/4/22 19:31:29

“超级工作站”的搭建,cpolar可成功内网穿透软件540!

GodoOS 是一款主打集成化的办公平台&#xff0c;它把日常办公所需的核心功能都整合在了一起&#xff1a;不仅能完成 Word 文档编辑、Excel 表格制作、PPT 排版、PDF 阅读等基础操作&#xff0c;还内置了内网聊天、在线白板、思维导图等协作工具&#xff0c;甚至配备了简易浏览器…

作者头像 李华
网站建设 2026/4/20 13:26:13

大数据领域 GDPR 合规性评估方法

大数据领域GDPR合规性评估方法&#xff1a;从"踩雷"到"避雷"的系统指南 一、引入&#xff1a;当大数据撞上"史上最严"数据法 2022年&#xff0c;Meta因"剑桥分析门"后续的GDPR违规被欧盟罚款12亿欧元——这不是个例。同年&#xff0c;…

作者头像 李华