LeetCode 868. 二进制间距

LeetCode 868. 二进制间距

题目描述

给定一个正整数 n,找到并返回 n 的二进制表示中两个 相邻 1 之间的 最长距离。如果不存在两个相邻的 1,返回 0

  • 距离定义为两个 1 的索引差值的绝对值(索引从最低位(0)开始向右增加)。
  • 示例:
    • 输入:n = 22 (二进制 10110),输出:2
    • 解释:22 的二进制是 10110,1 的位置为 1、2、4,相邻的 1 之间的距离分别为 1 和 2,最大为 2。

解法一:遍历每一位 + 记录上一个 1 的位置(最直观)

思路

从低位到高位依次检查 n 的每一位,用变量 last 记录上一个 1 出现的索引。当遇到一个新的 1 时,若 last 不是初始值 -1,则计算当前索引 ilast 的差值,更新最大距离 res。最后返回 res

代码

classSolution{public:intbinaryGap(int n){int res =0, last =-1;// n 最大 10^9 < 2^30,检查 30 位即可for(int i =0; i <30;++i){if((n >> i)&1){// 当前位为 1if(last !=-1){ res =max(res, i - last);} last = i;// 更新上一个 1 的位置}}return res;}};

举例分析

n = 22(二进制 10110)为例,索引从低位到高位:

i(n>>i)&1last (更新前)计算距离更新后 lastres
00-1--10
11-1不计算10
2112-1=121
302-21
4124-2=242

最终 res = 2,正确。

复杂度分析

  • 时间复杂度:O(位数) ≈ O(30) = O(1)
  • 空间复杂度:O(1)

解法二:逐位扫描 + 计数(另一种巧妙解法)

思路

同样从低位到高位扫描,用变量 cnt 记录从上一个 1 到当前位置所经过的位数(即当前已经遇到的连续 0 的个数 + 1)。初始化 cnt 为一个极小的负数(如 INT_MIN/2),确保第一个 1 出现时不会错误更新答案。

  • 遇到 0:cnt++,表示距离增加 1。
  • 遇到 1:
    • 用当前 cnt 更新最大距离 ans
    • 重置 cnt = 1,表示从当前这个 1 开始,到下一个可能的 1 至少相隔 1 位。
  • 循环结束返回 ans

代码

classSolution{public:intbinaryGap(int n){int ans =0, cnt = INT_MIN /2;// 初始为极小负数,避免第一个 1 误更新while(n >0){if(n %2==0){// 当前最低位为 0 cnt++;}else{// 当前最低位为 1 ans =max(ans, cnt); cnt =1;} n /=2;// 右移一位}return ans;}};

举例分析

仍以 n = 22(二进制 10110)为例,从低位向高位处理:

  • 初始:ans = 0, cnt = INT_MIN/2(假设 -1073741824)
  • 第 0 位(0):cnt++ → cnt = -1073741823
  • 第 1 位(1):遇到第一个 1,ans = max(0, -1073741823) = 0,cnt = 1
  • 第 2 位(1):ans = max(0, 1) = 1,cnt = 1
  • 第 3 位(0):cnt++ → cnt = 2
  • 第 4 位(1):ans = max(1, 2) = 2,cnt = 1

最终 ans = 2

复杂度分析

  • 时间复杂度:O(log n) ≈ O(30)
  • 空间复杂度:O(1)

两种解法对比

解法核心思想优点细节注意
解法一记录上一个 1 的索引,直接计算差值逻辑清晰,容易理解需要循环 30 位
解法二用计数器累积距离,遇 1 更新并重置代码更简洁,无需显式索引初始值需设为极小负数

两种方法本质上都是扫描所有二进制位,时间复杂度相同,可以根据个人喜好选择。


总结

本题是二进制位运算的基础题,主要考察对二进制表示的遍历和相邻 1 之间距离的计算。掌握这两种解法后,可以轻松应对类似的位操作问题。

Read more

Skill 构建指南:从零打造 AI 智能体扩展包

Skill 构建指南:从零打造 AI 智能体扩展包 引言 在人工智能时代,如何让智能体具备更强的专业能力和更丰富的工作流程?答案就是 Skill——一种为智能体设计的能力扩展包。本文将详细介绍如何从零开始构建符合规范的 Skill,让你的创意变成可分发的工具。 什么是 Skill? 核心定位 Skill 是被智能体加载和执行的能力扩展包,而非独立运行的应用程序。 执行模式 * Skill 在智能体的会话上下文中被动态加载 * 智能体读取 SKILL.md 的指导,调用 scripts/ 中的脚本,参考 references/ 中的文档 * Skill 的所有交互都通过智能体与用户的对话完成 Skill 提供的能力 * ✅ 专门工作流程(多步骤程序与条件逻辑) * ✅ 工具集成(文件格式与 API 的使用方式) * ✅ 领域专家知识(公司或系统特有的架构与逻辑) * ✅ 打包资源(脚本、参考、资产) Skill

By Ne0inhk
AI时代人人都是产品经理:落地流程:AI 核心功能,从需求到上线的全流程管控方法

AI时代人人都是产品经理:落地流程:AI 核心功能,从需求到上线的全流程管控方法

AI的普及正在重构产品经理的工作模式——不再依赖传统的跨部门协作瓶颈,AI可以成为产品经理的"全职助手",覆盖需求分析、原型设计、开发协同、测试验证全流程。本文将拆解AI时代产品核心功能从0到1落地的完整管控方法,让你用AI能力提升300%的落地效率。 一、需求阶段:AI辅助的需求挖掘与标准化 需求是产品的起点,AI可以帮你从海量信息中精准定位用户真实需求,避免"伪需求"浪费资源。 1. 需求挖掘:AI辅助用户洞察 传统需求调研依赖问卷、访谈,效率低且样本有限。AI可以通过以下方式快速完成用户洞察: * 结构化处理非结构化数据:用AI分析用户在社交媒体、客服对话、应用评论中的碎片化反馈,自动提炼高频需求点 * 需求优先级排序:基于KANO模型,AI可以自动将需求划分为基础型、期望型、兴奋型、无差异型四类,输出优先级列表 实战工具与示例: 使用GPT-4+Python脚本批量处理应用商店评论: import openai import pandas as

By Ne0inhk
人工智能|大模型 —— 开发 —— opencode与agent skills的安装与使用

人工智能|大模型 —— 开发 —— opencode与agent skills的安装与使用

一、Skills下载源 常用的GitHub仓库: 1、https://github.com/anthropics/skills 2、https://github.com/nextlevelbuilder/ui-ux-pro-max-skill 3、https://github.com/hesreallyhim/awesome-claude-code 4、https://github.com/ComposioHQ/awesome-claude-skills Agent Skills市场: Agent Skills 市场 - Claude、Codex 和 ChatGPT Skills | SkillsMP Open Agent Skills Ecosystem: The Agent Skills Directory ClawHub: ClawHub 二、

By Ne0inhk
openJiuwen集成蓝耘AI模型深度解析:从架构设计到企业级Agent实战部署

openJiuwen集成蓝耘AI模型深度解析:从架构设计到企业级Agent实战部署

前言 在人工智能技术从单纯的感知智能向认知智能演进的浪潮中,大语言模型(LLM)的成熟催生了AI Agent(人工智能体)这一全新的应用形态。AI Agent不再局限于传统的单指令执行,而是演进为具备自主感知、推理规划、决策执行能力的智能实体。在这一技术变革背景下,openJiuwen作为一个致力于提供灵活、强大且易用能力的开源Agent平台应运而生。本文将深度剖析openJiuwen的技术架构、核心优势,并基于真实的服务器部署环境,详细拆解从底层环境搭建到上层复杂智能体构建的全过程。 一、 Agentic AI时代的基础设施:openJiuwen概览 openJiuwen的定位不仅是一个开发工具,而是面向生产级应用的Agent全生命周期管理平台。它旨在解决当前大模型应用落地过程中面临的开发门槛高、协同调度难、运行稳定性差等痛点。通过提供标准化的开发框架与高可靠的运行引擎,openJiuwen支持开发者快速构建能够处理各类简单或复杂任务的AI Agent,并实现多Agent间的协同交互。 作为核心代码资产的入口,开发者能在这里查看项目的 Readme 文档、分支管理和最新提交

By Ne0inhk