LeetCode算法题-Binary Number with Alternating Bits(Java实现)

状态估计【扩展卡尔曼滤波算法的神经网络训练】BP神经网络、扩展卡尔曼滤波EKF+BP、粒子滤波PF轨迹估计研究(Matlab代码实现) 内容概要:本文围绕状态估计与神经网络融合技术展开研究,重点介绍了扩展卡尔曼滤波(EKF)与BP神经网络的联合算法(EKF+BP)以及粒子滤波(PF)在轨迹估计中的应用。资源基于Matlab/Simulink平台,提供了BP神经网络、EKF+BP融合算法和PF的完整代码实现,旨在通过仿真手段提升非线性系统的状态估计精度。文中不仅涵盖了卡尔曼滤波系列(如UKF、EKF、PF)的基本原理与实现方法,还展示了其在风电预测、电池寿命预测、无人机状态估计、雷达跟踪等领域的广泛应用,突出其在复杂动态系统建模与轨迹预测中的实用价值。; 适合人群:具备一定Matlab编程基础,从事自动化、控制工程、电气工程、人工智能及相关领域的研究生、科研人员和工程技术人员。; 使用场景及目标:①深入理解并掌握扩展卡尔曼滤波与BP神经网络融合的建模机制与实现流程;②开展非线性系统的状态估计与动态轨迹跟踪仿真研究;③应用于无人机导航、机器人定位、电力系统状态监测、信号处理等领域的算法开发与系统优化。; 阅读建议:本资源以Matlab代码为核心,建议读者结合提供的仿真模型与参考文献动手实践,重点关注EKF与BP网络的参数配置、融合策略设计及滤波性能对比,通过比较UKF、EKF与PF等不同滤波算法的估计效果,深化对状态估计算法优劣与适用场景的理解。 立即下载

这是悦乐书的第292次更新,第310篇原创

01 看题和准备

今天介绍的是LeetCode算法题中Easy级别的第160题(顺位题号是693)。给定正整数,检查它是否具有交替位:即它的二进制数的任意两个相邻位总是具有不同的值。例如:


输入:5

输出:true

说明:5的二进制表示是:101


输入:7

输出:false

说明:7的二进制表示为:111。


输入:11

输出:false

说明:11的二进制表示是:1011。


输入:10

输出:true

说明:10的二进制表示是:1010。

本次解题使用的开发工具是eclipse,jdk使用的版本是1.8,环境是win7 64位系统,使用Java语言编写和测试。

02 第一种解法

最直接解法,将正整数转为二进制字符串,借助包装类Integer的toBinaryString方法实现,然后对字符串的字符进行遍历,如果相邻的字符相等了,直接返回false。

public boolean hasAlternatingBits(int n) {
    String str = Integer.toBinaryString(n);
    for (int i=1; i<str.length(); i++) {
        if (str.charAt(i) == str.charAt(i-1)) {
            return false;
        }
    }
    return true;
}

03 第二种解法

我们也可以观察下为true的那些数,从1开始:

1,其二进制数为:1

2,其二进制数为:10

5,其二进制数为:101

10,其二进制数为:1010

通过观察这些二进制数,我们可以发现,它们可以看做是10和1的组合体。对于10,可以有零个,也可以有多个,而对于1,只可能是0个或者1个,多了就重复了。因此,我们也可以使用正则表达式来解。

匹配多字符10,使用圆括号;匹配0次或者多次,使用星号,或者{0,}。

匹配1,可以直接写1,匹配0次或者1次,使用问号,或者{0,1}。

public boolean hasAlternatingBits(int n) {
    String str = Integer.toBinaryString(n);
    //(10){0,}1{0,1} 这样写也是可以的    
    return str.matches("(10)*1?");
}

04 第三种解法

我们也可以不将其转为二进制字符串,直接使用位运算来判断,借助与(&)运算。与运算的规则是对应位都为1才为1,否则对应位为0。每次将n和1进行与运算,看它最后一位是0还是1,使用一个临时变量,将其二进制数的最后一位记录下来,与当前的最后一位比较,如果相同了,就返回false。

public boolean hasAlternatingBits(int n) {
    // 记录每次操作的最后一位    
    int prev = -1;
    while (n > 0) {
        if ((n&1) == 1) {
            if (prev == 1) {
                return false;
            }
            prev = 1;
        } else {
            if (prev == 0) {
                return false;
            }
            prev = 0;
        }
        // 每次将其右移一位
        n >>= 1;
    }
    return true;
}

05 第四种解法

对于第三种解法,我们还可以再简化下。上面我们每进行一次计算都会去判断一下,是否等于上一次计算的最后一位,这里我们将其移动到while循环的判断条件中去,反过来处理,先得到下一次正确的最后一位,看其符不符合。依旧使用一个临时变量,循环继续的条件变成了当前最后一位是否等于预先设定好的那个数,在循环内部,我们对temp变量进行变动,取每次计算的相反值,如果计算为0,那么temp就为1,表示下一次参与计算后的最后一位要为1,否则就去判断n是否已经等于0了。

public boolean hasAlternatingBits(int n) {
    int temp = n&1;
    while ((n&1) == temp) {
        temp = 1-temp;
        n >>= 1;
    }
    return n == 0;
}

06 第五种解法

此解法利用了n的二进制数0与1交替的特征,与自身右移一位后的数进行错位相加,变成了一个全部由1组成的二进制数,然后再利用检测是否全为1的方法,判断是否符合题意。而检测的方法就是,加1后和自身进行与运算,因为如果该二进制数全为1,加1后就转为了首位为1,其余位都是0的二进制数,再与原来的自己进行与运算,运算的结果就是0。比如5,5+5/2变成了7,二进制数为111,加1后,其二进制数变为了1000,两者进行与运算后,得到的结果是0。除以2和右移一位的效果等同。

public boolean hasAlternatingBits(int n) {
    // ((n + (n >> 1) + 1) & (n + (n >> 1))) == 0 这样写也行    
    return ((n+n/2+1) & (n+n/2)) == 0;
}

07 小结

算法专题目前已日更超过四个月,算法题文章160+篇,公众号对话框回复【数据结构与算法】、【算法】、【数据结构】中的任一关键词,获取系列文章合集。

以上就是全部内容,如果大家有什么好的解法思路、建议或者其他问题,可以下方留言交流,点赞、留言、转发就是对我最大的回报和支持!

告别JTAG!用Artix-7和SPI Flash实现FPGA远程升级的保姆级教程 本文详细介绍了如何利用Artix-7 FPGA和SPI Flash实现FPGA远程升级(OTA)的完整方案。通过硬件连接、Vivado工程配置和STM32模拟更新等步骤,帮助开发者告别传统的JTAG烧录方式,实现高效、安全的远程固件更新,特别适用于嵌入式系统开发中的现场维护场景。 阅读详情

相关推荐

Docker容器n8n中 read/write files from disk 无法读取容器内文件解决方案

《n8n文件读写Docker部署常见问题解决方案》摘要:针对n8n 1.90.2版本在Docker环境下文件读写失败问题,本文分析常见错误包括路径错误(ENOENT)、权限不足(EACCES)及节点误用问题。核心解决方案为:1)通过-v参数挂载宿主机目录到容器(如/files);2)使用新版Read/WriteFilesfromDisk节点操作文件;3)确保权限设置正确。提供可直接导入的示例工作流JSON,演示从CSV读取到结构化数据处理的全流程。特别强调已部署用户需重新挂载卷的正确操作方式,并附解决方案对

m0_74822402的博客 2184

LeetCode笔记:693. Binary Number with Alternating Bits

LeetCode笔记:693. Binary Number with Alternating Bits  Cloudox_ 关注 2018.01.13 10:20 字数 468 阅读 16评论 0喜欢 0 问题(Easy): Given a positive integer, check whether it has alternating bits: namely, if two ad...

binbigdata的博客 232

浅谈车载控制器产线EOL实现方式

1、控制器生产产线上电路检测设计 2、客户总装产线检测设计

u012406840的博客 2万+

LeetCode-693. Binary Number with Alternating Bits [C++][Java]

Given a positive integer, check whether it has alternating bits: namely, if two adjacent bits will always have different values.

贫道绝缘子的博客 1281

SAP_SD模块路径及运输功能后台配置简介

后台路径:SPRO—后勤执行—装运—基本发运功能—定义路线—定义传输模式根据实际运输过程运输地理的类型:海运、公路运输、空运后台路径:SPRO—后勤执行—装运—基本发运功能—定义路线—定义发运类型根据实际运输过程运输方式:汽车、卡车、火车、轮船、飞机后台路径:SPRO—后勤执行—装运—基本发运功能—路径—定义路线—定义运输连接点指在运输过程中需要中转的地区可以维护中转地区的停留的时间后台路径:SPRO—后勤执行—装运—基本发运功能—路径—定义路线—定义路径和阶段。

我小时候很黑的博客 1401

rosbag分析传感器数据的时间同步情况方法

ROS传感器时间同步分析流程:通过rosbaginfo初步检查bag文件信息,使用rqt_bag可视化时间线分布,采用rostopicecho或Python脚本提取各传感器时间戳并计算时间差统计值(均值/最大差/标准差),最后分析接收与采样时间延迟。量化评估同步精度,识别固定偏移或随机抖动问题,确保多传感器数据对齐,为后续融合处理提供可靠数据基础。

start_up_go的博客 202

LeetCode-693. Binary Number with Alternating Bits

693. Binary Number with Alternating Bits Given a positive integer, check whether it has alternating bits: namely, if two adjacent bits will always have different values. Example 1: Input: ...

anchouman0644的博客 228

基于投影法实现扫描文件的光学字符分割——Matlab实现

投影法是指将原图像沿着某个特定的方向进行投影,得到投影线上的像素点的个数或像素值总和,从而可以得到该方向上物体的轮廓信息。对于字符分割,我们可以将图像进行水平和垂直两个方向的投影,从而得到字符之间的分割线。在OCR技术中,字符分割是非常重要的一步骤,因为字符之间的分割对字符识别的准确性有很大的影响。通过对投影值的判断,可以求出字符之间的分割线,这里我们根据垂直方向上的投影值进行判断,选取一个阈值进行筛选即可。使用sum()函数分别计算出水平和垂直方向上的投影值,得到每一行和每一列的投影值。

TechGlide的博客 583

693. Binary Number with Alternating Bits

Given a positive integer, check whether it has alternating bits: namely, if two adjacent bits will always have different values. Example 1: Example 2: Example 3: Example 4: 题解: packa...

realcj28的博客 229

AUTOSAR进阶图解==>AUTOSAR_SWS_BSWGeneral

本文详细解析AUTOSAR基础软件(BSW)模块的通用规范,涵盖其分层架构、配置管理、初始化流程和状态转换机制。AUTOSAR采用清晰的分层设计,包括应用层、服务层、ECU抽象层和微控制器抽象层,各层模块通过标准化接口交互。BSW模块配置采用类型化定义,支持预初始化、初始化和后期构建配置。文档还阐述了模块初始化流程中的依赖管理,以及运行时的状态转换与错误处理机制,为汽车电子控制单元的标准化开发提供规范指导。

一名留德华的,康德的信徒的,专注于汽车电子领域的博客 1129

MZI and MI Optical Waveguide(马赫曾德与迈克尔逊光波导)

注意,这里的 “镜子” 并不是真的在波导中做一个镜子出来,而是通过使用一个 1x2 的 MMI 结构将 MMI 输出的两个端口连接起来形成一个 “宽带镜子”。对于这里形成镜子的详细原理,后面有时间了我们再做更加详细地介绍。,它由一个 splitter 构成和两个仿佛带有 “镜子” 的臂组成。相比较于 MZI,光波可以在它的臂中传输,最终从进光口处出去得到相长或者相消干涉,很明显,在。)的折射率,从而使得两个臂上产生的相位差值不同,最终得到相长或者相消干涉的结果。这里,给大家介绍一下。,它更像是一个折叠的。

u011699626的博客 2455

LeetCode - Easy - 693. Binary Number with Alternating Bits

Topic Bit manipulation Description https://leetcode.com/problems/binary-number-with-alternating-bits/ Given a positive integer, check whether it has alternating bits: namely, if two adjacent bits will always have different values. Example 1: Input: n = 5

KISS 186

含分布式光伏的IEEE 33节点配电网电压越限仿真分析

摘要 本文针对分布式光伏接入配电网引发的电压越限问题,基于IEEE 33节点系统开展仿真研究。首先分析了光伏出力的随机性和波动性特性,采用Beta分布和马尔可夫链方法建立光伏出力模型;其次在MATLAB/Simulink平台搭建完整测试系统,包含光伏模型、配电网线路模型和控制模块;最后通过多场景仿真定量分析了不同光伏渗透率和接入位置对节点电压的影响。结果表明:光伏渗透率提高会显著增加电压越限风险,特别是线路末端节点;光伏接入位置对电压分布具有决定性影响,馈线末端接入更易引发电压越限。研究为含高比例光伏的配电

huanghm88的专栏 322

LeetCode 题解之 693. Binary Number with Alternating Bits

693. Binary Number with Alternating Bits 题目描述和难度 题目描述: 给定一个正整数,检查他是否为交替位二进制数:换句话说,就是他的二进制数相邻的两个位数永不相等。 示例 1: 输入: 5 输出: True 解释: 5的二进制数是: 101 示例 2: 输入: 7 输出: False 解释: 7的二进制数是: 111 示例 ...

李威威的博客 441

C# WinForm 基于DirectShow.dll编写的程序,可边预览边保存视频,音频和图片

基于微软的DirectShow.dll的二次开发1.自动识别连接的摄像头跟麦克风且可以对其进行选择(默认选中第一个)2.可录制wmv和avi两种格式的视频并且都带有音频,avi可以录制的分辨率和帧数进行选择,wmv默认进行了淸晰度优化如不喜欢可去除代码中有相关提示3.可在预览点开之后进行拍照,也可边录制视频边拍照4.添加了视频和音频的压缩功能(酌情使用)这次二次开发发现C#对DirectShow的相关信息太少,这次做完也不敢藏私共享出来,还望大家指正

jdk-8u144-linux-x64.tar.gz.

该资源为搭建Linux系统Java环境用,资源的后缀为tar.gz格式的压缩包

LeetCode-Binary Number with Alternating Bits

LeetCode Java Binary Number with Alternating Bits

坟头草一米七五 176

复分析 阿尔福斯(Ahlfors) 第三版答案 英文

答案分为十章,有部分习题没有答案,全英文复分析阿尔福斯(Ahlfors) 第三版答案

[leetcode] 693. Binary Number with Alternating Bits

题目: Given a positive integer, check whether it has alternating bits: namely, if two adjacent bits will always have different values. Example 1: Input: 5 Output: True Explanation: The binary repres...

jing16337305的博客 126

jre9下载 jdk9

(Java SE Runtime Environment 9.0) 9.0u175 官方最新版 【x86|x64】

Leetcode 693. Binary Number with Alternating Bits

文章作者:Tyan 博客:noahsnail.com &nbsp;|&nbsp; 优快云 &nbsp;|&nbsp; 简书 1. Description 2. Solution Version 1 class Solution { public: bool hasAlternatingBits(int n) { vector&lt;int&g...

SnailTyan 435

Leetcode 693: Binary Number with Alternating Bits

问题描述: Given a positive integer, check whether it has alternating bits: namely, if two adjacent bits will always have different values. 思路: 将整数转化成二进制字符串,再判断字符串相邻位是否不同 本质上考察JAVA Integer.toBinaryString 操作 代码: class Solution { public boolean hasAlternating

weixin_51401145的博客 95

693. Binary Number with Alternating Bits - LeetCode

Question 693.Binary Number with Alternating Bits Solution 思路:输入一个整数,它的二进制01交替出现,遍历其二进制字符串,下一个与上一个不等,返回true,如果有相等的就返回false Java实现: public boolean hasAlternatingBits(int n) { char last = '2'; // 非...

weixin_30426065的博客 83

693. Binary Number with Alternating Bits -LeetCode

为什么80%的码农都做不了架构师?>>> ...

weixin_34377065的博客 91

[LeetCode] Binary Number with Alternating Bits 有交替位的二进制数

  Given a positive integer, check whether it has alternating bits: namely, if two adjacent bits will always have different values. Example 1: Input: 5 Output: True Explanation: The binary repr...

weixin_34413103的博客 150

693. Binary Number with Alternating Bits 交替位二进制数

Given a positive integer, check whether it has alternating bits: namely, if two adjacent bits will always have different values. Example 1: Input: 5 Output: True Explanation: The binary representat

caisense的专栏 192

北京工作前一天

今天是2018年1月8日,于沈阳,2018年的第一场大雪,明天就要去北京正式工作了,下午等友人,无聊,故刷Leetcode小题~ 第1题、728. Self Dividing Numbers A self-dividing number is a number that is divisible by every digit it contains. For example, 128 is

两鬓已不能斑白的专栏 643
上一篇: LeetCode算法题-Employee Importance(Java实现)
下一篇: LeetCode算法题-Count Binary Substrings(Java实现)
程序员小川
博客等级 码龄10年 47粉丝 305原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值