当前位置: 首页 > news >正文

经典算法实例应用:交替位二进制数(一)

我们先来看题目描述:

给定一个正整数,检查它的二进制表示是否总是 0、1 交替出现:换句话说,就是二进制表示中相邻两位的数字永不相同。

示例 1:

输入:n = 5 输出:true 解释:5 的二进制表示是:101

示例 2:

输入:n = 7 输出:false 解释:7 的二进制表示是:111.

示例 3:

输入:n = 11 输出:false 解释:11 的二进制表示是:1011.

提示:

  • 1 <= n <= 231 - 1

解决方案

方法一:模拟

思路

从最低位至最高位,我们用对 2 取模再除以 2 的方法,依次求出输入的二进制表示的每一位,并与前一位进行比较。如果相同,则不符合条件;如果每次比较都不相同,则符合条件。

代码

Python3

class Solution: def hasAlternatingBits(self, n: int) -> bool: prev = 2 while n: cur = n % 2 if cur == prev: return False prev = cur n //= 2 return True

Java

class Solution { public boolean hasAlternatingBits(int n) { int prev = 2; while (n != 0) { int cur = n % 2; if (cur == prev) { return false; } prev = cur; n /= 2; } return true; }

C++

class Solution { public: bool hasAlternatingBits(int n) { int prev = 2; while (n != 0) { int cur = n % 2; if (cur == prev) { return false; } prev = cur; n /= 2; } return true; } };

C

#define MAX(a, b) ((a) > (b) ? (a) : (b)) int maxConsecutiveChar(const char * answerKey, int k, char ch) { int n = strlen(answerKey); int ans = 0; for (int left = 0, right = 0, sum = 0; right < n; right++) { sum += answerKey[right] != ch; while (sum > k) { sum -= answerKey[left++] != ch; } ans = MAX(ans, right - left + 1); } return ans; } int maxConsecutiveAnswers(char * answerKey, int k) { int cnt1 = maxConsecutiveChar(answerKey, k, 'T'); int cnt2 = maxConsecutiveChar(answerKey, k, 'F'); return MAX(cnt1, cnt2); }

复杂度分析

时间复杂度:O(logn) 。输入 n 的二进制表示最多有 O(logn) 位。

空间复杂度:O(1) 。使用了常数空间来存储中间变量。

http://www.jsqmd.com/news/1206269/

相关文章:

  • 蒸馏设备怎么选?AISHENGKE工艺装备深度测评 - 资讯焦点
  • 3分钟掌握终极图表制作:Mermaid Live Editor让你告别拖拽式绘图烦恼
  • HarmonyOS今天吃什么——管理页面的增删改查与收藏设计
  • 【JAVA毕设源码分享】基于SpringBoot的植物知识管理与分享平台的设计与实现(程序+文档+代码讲解+一条龙定制)
  • wild-wild-path源码解析:核心函数iterate与list的实现原理
  • 小红书无水印下载工具:3种方法轻松保存你喜欢的笔记内容
  • HCL模拟器设备启动失败的6大排查方案
  • CMP技术解析:芯片制造的纳米级抛光工艺
  • DS4Windows:让PS手柄在Windows电脑上畅玩游戏的完美解决方案
  • 如何用OpenCore Legacy Patcher解决老Mac硬件兼容性问题
  • 工地放假了?别着急走!安全员请确认这7个方面和28件事已做好!
  • 军事防务:无人机集群攻击由“狼群”转换为“蜂群”
  • Qt与OpenCV结合开发图片识别应用实战指南
  • Windows Server 2008域控制器升级全攻略
  • Linux包管理工具yum详解:从基础使用到高级配置
  • 深度解密Wand-Enhancer:如何通过开源技术实现游戏修改工具的完整功能解锁
  • 让老旧电视重获新生:mytv-android安卓电视直播软件的完整指南
  • 本地大模型接入外部知识库:RAG技术实战指南
  • Linux系统ISO镜像制作指南与性能优化
  • 高级动画:弹簧动画与路径动画实战(187)
  • 别急着学 Agent 编排,权限与日志才是大厂面试的隐形门槛
  • 使用wget实现网站资源循环下载的技术指南
  • WarcraftHelper完整配置指南:5分钟让你的魔兽争霸3焕然一新!
  • PDF补丁丁:告别乱码困扰,让PDF文档在任何设备上完美显示
  • 武汉科谷技工学校办学全貌与 2026 年招生报考参考 - 升学择校早知道
  • 鸿蒙远程真机工具HOScrcpy:高效架构设计与关键技术实现方案
  • 5分钟上手:免费本地视频字幕提取神器全攻略
  • 如何用开源工具快速提取网易云与QQ音乐歌词:5大核心功能解析
  • 完整指南:使用OpenCore Legacy Patcher让旧Mac焕发新生
  • AVSession:媒体会话控制与锁屏播放(192)