news 2026/6/25 16:32:21

2026-01-20-LeetCode刷题笔记-3314-构造最小位运算数组I

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
2026-01-20-LeetCode刷题笔记-3314-构造最小位运算数组I

title: 2026-01-20-LeetCode刷题笔记-3314-构造最小位运算数组I
date: 2026-01-20
tags:

  • 算法学习
  • LeetCode
  • 位运算

题目信息

  • 平台:LeetCode
  • 题目:3314. 构造最小位运算数组 I
  • 难度:Medium
  • 题目链接:Construct the Minimum Bitwise Array I

题目描述

给定一个整数数组 nums(题面为素数数组),对每个 nums[i] 寻找最小的非负整数 x,使得x | (x + 1) == nums[i]。若不存在这样的 x,返回 -1。


初步思路

  1. 观察x | (x + 1):它会把 x 的“最右侧第一个 0”变成 1,因此结果必然以连续的 1 结尾。
  2. 若 y = nums[i],设 y 末尾连续 1 的个数为 k,则最小的 x 就是把这段连续 1 中最高位的那个 1 清掉。
  3. 题面为素数数组,因此只有 y=2 为偶数且无解,其他 y 都是奇数可处理。

算法分析

  • 核心:统计 y 的末尾连续 1 的个数 k,然后x = y - (1 << (k - 1))
  • 技巧:x | (x + 1)的结果一定是奇数且以连续 1 结尾
  • 时间复杂度:O(n * k),k 为末尾连续 1 的数量(总体很小)
  • 空间复杂度:O(1)(不含输出)

代码实现(Python)

解法一:统计末尾连续 1

fromtypingimportListclassSolution:defminBitwiseArray(self,nums:List[int])->List[int]:ans=[]fornuminnums:ifnum==2:ans.append(-1)continuek=0whilenum&(1<<k):k+=1ans.append(num-(1<<(k-1)))returnans

解法二:位运算快速定位翻转位

fromtypingimportListclassSolution:defminBitwiseArray(self,nums:List[int])->List[int]:ans=[]fornuminnums:ifnum==2:ans.append(-1)continuet=num^(num+1)bit=(t+1)>>2ans.append(num^bit)returnans

总结与反思

  1. 关键在于“最右侧第一个 0 会被置 1”,因此结果以连续 1 结尾。
  2. 可以用位运算快速定位要翻转的那一位
版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/6/16 4:29:31

PHP 异步与多线程 从 TrueAsync 展望未来

RFC TrueAsync 1.7 讨论中有个问题&#xff1a;这个提议会如何与 PHP 核心未来的变化互动&#xff1f;要设计好语言的长期演进&#xff0c;至少得对 PHP 的发展方向有基本判断。本文试图回答这个问题。 TrueAsync 项目不仅是 PHP 核心的 async 改动&#xff0c;还包括回答以下…

作者头像 李华
网站建设 2026/6/15 14:52:11

必看!2026年EOR名义雇主服务TOP5,助力企业高效解决用工问题

在2026年&#xff0c;EOR名义雇主服务在全球市场中扮演着越来越重要的角色。这些服务为企业提供了灵活的用工方案&#xff0c;确保所有操作符合当地法律法规。通过EOR名义雇主服务&#xff0c;企业能够轻松管理全球员工的薪资、税务和合同事务&#xff0c;同时降低用工风险。这…

作者头像 李华
网站建设 2026/6/23 5:41:41

qt之实现截图效果

以下是修改后的代码,实现鼠标滑动矩形区域截图功能: #include <QGuiApplication> #include <QScreen> #include <QPixmap> #include

作者头像 李华
网站建设 2026/6/21 19:26:36

电网管理中的分层决策 matlab源代码,代码按照高水平文章复现,保证正确 由于可再生能源发电...

电网管理中的分层决策 matlab源代码&#xff0c;代码按照高水平文章复现&#xff0c;保证正确 由于可再生能源发电、可变需求和计划外停电等因素的影响&#xff0c;电网管理是一个多时间尺度决策和随机行为的难题。 在面对不确定性的情况下解决这一问题需要一种具有易于处理的算…

作者头像 李华
网站建设 2026/6/20 10:52:09

Python 中subprocess.getstatusoutput(cmd) 函数注入命令风险分析

风险根本原因subprocess.getstatusoutput() 函数内部实现使用了 shellTrue&#xff0c;这意味着命令在 shell 中执行&#xff1a;# 查看源码&#xff08;Python 3.10&#xff09; def getstatusoutput(cmd):"""Return (status, output) of executing cmd in a s…

作者头像 李华