news 2026/7/26 7:21:20

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/7/23 19:47:34

生产线效率已近瓶颈,如何通过精益管理实现新的突破?

泻药&#xff0c;生产线效率已近瓶颈&#xff0c;如何通过精益管理实现新的突破&#xff1f;这个问题&#xff0c;其实我在很多制造企业里反复听到过。老板常说的是一句话&#xff1a;“人已经很忙了&#xff0c;设备也没少开&#xff0c;但效率就是上不去。”再追问几句&#…

作者头像 李华
网站建设 2026/7/21 22:41:53

计算机毕业设计springboot医院门诊信息管理系统 基于SpringBoot的智慧门诊综合服务平台 面向中小型医院的SpringBoot门诊业务一体化系统

计算机毕业设计springboot医院门诊信息管理系统v1oug17b &#xff08;配套有源码 程序 mysql数据库 论文&#xff09; 本套源码可以在文本联xi,先看具体系统功能演示视频领取&#xff0c;可分享源码参考。当“看病难、排队久、信息孤岛”成为医院门诊的普遍痛点时&#xff0c;一…

作者头像 李华
网站建设 2026/7/24 5:42:00

从提示词工程到智能体协同:深度解码 AI 写作的技术底层、进阶实践与未来内容生产力的重塑之路

从提示词工程到智能体协同&#xff1a;深度解码 AI 写作的技术底层、进阶实践与未来内容生产力的重塑之路 摘要 本文旨在探讨生成式人工智能&#xff08;AIGC&#xff09;在写作领域的深度应用&#xff0c;从底层技术的概率拟合逻辑出发&#xff0c;剖析 AI 写作如何实现从“简…

作者头像 李华
网站建设 2026/7/21 18:47:04

提示系统容器编排管理:提示工程架构师的最优策略

系统容器编排管理&#xff1a;提示工程架构师的最优策略 引言&#xff1a;为什么提示工程需要「容器编排思维」&#xff1f; 作为一名提示工程架构师&#xff0c;你是否遇到过这些痛点&#xff1f; 环境混乱&#xff1a;本地调试好的提示流程&#xff0c;部署到测试环境就报错—…

作者头像 李华
网站建设 2026/7/26 2:26:29

【图像检测】基于机器视觉的香蕉质量检测附Matlab代码

✅作者简介&#xff1a;热爱数据处理、建模、算法设计的Matlab仿真开发者。&#x1f34e;更多Matlab代码及仿真咨询内容点击 &#x1f517;&#xff1a;Matlab科研工作室&#x1f34a;个人信条&#xff1a;格物致知。&#x1f525; 内容介绍一、技术背景与核心目标香蕉作为全球…

作者头像 李华
网站建设 2026/7/23 1:46:28

SSM237的二手车交易网站

目录SSM237二手车交易网站摘要开发技术源码文档获取/同行可拿货,招校园代理 &#xff1a;文章底部获取博主联系方式&#xff01;SSM237二手车交易网站摘要 SSM237二手车交易网站是一个专注于二手车买卖、评估及服务的在线平台&#xff0c;旨在为用户提供便捷、透明、高效的二手…

作者头像 李华