【刷题日记】693. 交替位二进制数

简介: 本次刷题日记的第 16 篇,力扣题为:67. 二进制求和 ,简单

【刷题日记】693. 交替位二进制数

本次刷题日记的第 16 篇,力扣题为:67. 二进制求和简单

一、题目描述:

image.png

下班回来瞅一眼力扣题,咱们顺手给他写了吧,保持良好的习惯,毕竟现在已经算是在赶作业了


看这个题要求还是非常明确的,又是一个处理二进制的题目,我们一起来看看吧

二、思路分析:

1、这道题考察了什么思想?你的思路是什么?

这道题给出了哪些重点信息呢:

  • 题目给出的数据是一个正整数, 咱们处理起来就不需要考虑负数的情况
  • 我们需要知道如何将整数转换成二进制,才能更好的处理这个题,如果是负数的话,我们还要处理高位补 1 的事情,不过这道题不需要

关于进制的题,我们都要想到辗转相除法,这是咱们小学的时候就学过的数学方法,现在来做编程题,很多都是数学思想,学好数学走遍天下

用题目中给出的示例,推演一下: n=11 的时候

image.png

  • 11 除以 2 ,商 5 , 余数为 1
  • 5 除以 2 ,商 2 ,余数为 1
  • 2 除以 2 ,商 1 ,余数为 0
  • 1 除以 2 ,商 0 ,余数为 1
  • 则 11 的二进制就是 1011

根据题中示意,需要二进制数,相邻两个数字不能是相等的,非  0 即 1

则我们不仅要能算出二进制数,还需要筛选,那么问题咱们就可以转化成辗转相除法每一次的余数,是否和上一次的余数相等

若相等,则不符合题意,若辗转到商 0 的时候,余数也与上一次余数不相等,则该数是符合题意的

接下来咱们就可以来翻译成代码了

三、编码

根据上述逻辑和分析,我们就可以翻译成如下代码

编码如下:

func hasAlternatingBits(n int) bool {
 // 将入参给到临时变量,我们的编码原则是不能改变入参
 tmp := n
// 默认上一次余数为 2 ,因为咱们第一次辗转相除的时候,余数一定不可能是 2 ,所以第一次肯定不会等于 2 ,或者可以将 pre 赋值给大于 2 的数字也是可以的
 for pre := 2; tmp != 0; tmp /= 2 {
        yushu := tmp % 2
     // 校验本次的余数和上一次的余数是否相等
        if yushu == pre {
            return false
        }
     // 对上一次的余数进行赋值
        pre = yushu
    }
    return true
}

看了上述编码后就知道这个题还是非常简单的,但是思想也是相当重要的,无论做什么事情,基础要牢固

四、总结:

该题的时间复杂度,可不是 O(n) 哦,他是 O(logn) , 因为我们的循环次数是整数转成二进制数的位数, 空间复杂度是 O(1)

欢迎点赞,关注,收藏

朋友们,你的支持和鼓励,是我坚持分享,提高质量的动力

image.png

好了,本次就到这里

技术是开放的,我们的心态,更应是开放的。拥抱变化,向阳而生,努力向前行。

我是阿兵云原生,欢迎点赞关注收藏,下次见~

相关文章
|
6月前
|
人工智能 JavaScript Java
如何在IDEA中借助深度思考模型 QwQ 提高编码效率?
通义灵码目前已经支持 QwQ-plus 模型,欢迎大家在【智能问答】里,选择切换模型,即可体验更小尺寸、更强性能的新模型!
205 10
|
数据库 数据安全/隐私保护 数据库管理
|
消息中间件 存储 数据库
深入学习RocketMQ的底层存储设计原理
文章深入探讨了RocketMQ的底层存储设计原理,分析了其如何通过将数据和索引映射到内存、异步刷新磁盘以及消息内容的混合存储来实现高性能的读写操作,从而保证了RocketMQ作为一款低延迟消息队列的读写性能。
|
9月前
|
人工智能 小程序 UED
【一步步开发AI运动小程序】十六、AI运动识别中,如何判断人体站位?
【云智AI运动识别小程序插件】提供人体、运动及姿态检测的AI能力,本地引擎无需后台支持,具备快速、体验好、易集成等优势。本文介绍如何利用插件的`camera-view`功能,通过检测人体站位视角(前、后、左、右),确保运动时的最佳识别率和用户体验。代码示例展示了如何实现视角检查,确保用户正或背对摄像头,为后续运动检测打下基础。
|
6月前
|
监控 算法 JavaScript
企业用网络监控软件中的 Node.js 深度优先搜索算法剖析
在数字化办公盛行的当下,企业对网络监控的需求呈显著增长态势。企业级网络监控软件作为维护网络安全、提高办公效率的关键工具,其重要性不言而喻。此类软件需要高效处理复杂的网络拓扑结构与海量网络数据,而算法与数据结构则构成了其核心支撑。本文将深入剖析深度优先搜索(DFS)算法在企业级网络监控软件中的应用,并通过 Node.js 代码示例进行详细阐释。
110 2
|
网络协议 Unix 网络安全
FTP服务器怎么搭建?Windows server搭建FPT服务器
FTP服务器是按照FTP协议提供文件传输服务的计算机。它用于在两台计算机间安全地传输文件,支持用户权限管理和跨平台操作。FTP使用控制连接处理命令,数据连接传输文件,有PORT和PASV模式。要搭建FTP服务器,首先在Windows Server 2008 R2上安装IIS,确保选中FTP服务。接着,创建FTP文件夹作为站点根目录,通过IIS管理器添加FTP站点,配置站点信息、身份验证和权限。测试客户端通过telnet和浏览器访问FTP服务器,确认能成功登录及浏览文件。FTP常用于文件共享和管理,可通过专用工具如FlashFXP上传下载文件。
516 0
FTP服务器怎么搭建?Windows server搭建FPT服务器
WXM
|
Java 应用服务中间件 网络安全
Eclipse运行SSM/SSH项目教程
Eclipse运行SSM/SSH项目教程
WXM
464 0
|
机器学习/深度学习 监控 算法
深度学习赋能现代智能监控:图像识别技术的突破与应用
【4月更文挑战第8天】 在数字时代,智能监控系统作为城市安全和高效管理的关键组成部分,其发展受到了广泛关注。本文聚焦于基于深度学习的图像识别技术在智能监控领域的应用,探讨了该技术如何提升监控系统的自动化和智能化水平。通过对卷积神经网络(CNN)、循环神经网络(RNN)等深度学习模型的研究,分析了其在实时目标检测、行为识别和异常行为分析中的具体应用。文章还讨论了这些技术在实际部署中遇到的挑战,如数据隐私保护、算法优化和系统集成等问题,并提出了相应的解决策略。
|
NoSQL 关系型数据库 MySQL
Vgo-适合golang初学者的开源框架
# Vgo Vgo是一款基于Gin的开源服务端框架,集成了Redis、Mysql、JWT及队列等技术栈,适合Golang初学者。项目包括Vgo-Gitee和VgoAdmin-Gitee,可通过克隆仓库并按照安装指南进行部署。其目录结构清晰,涵盖路由、模型、后台接口等功能模块,更多功能持续开发中。
260 3
|
API 开发者
淘宝官方商品、交易、订单、物流、插旗接口接入说明
这段信息介绍了淘宝店铺管理中三个重要接口的功能与应用场景:订单列表接口、订单详情接口和订单物流接口。订单列表接口如`taobao.trades.sold.get`及`taobao.topats.trades.sold.get`用于获取店铺订单概览,便于商家进行初步管理和统计。订单详情接口如`taobao.trade.fullinfo.get`及`taobao.topats.trades.fullinfo.get`提供单个订单详尽信息,支持发货准备和服务售后。订单物流接口则帮助追踪订单物流状态,确保配送顺利。使用这些接口需遵循淘宝开放平台规定,合理安排调用频率,并关注官方文档更新。