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

华为OD机试之不含101的整数(Java源码)

不含101的数

题目描述

小明在学习二进制时,发现了一类不含 101的数,也就是:
将数字用二进制表示,不能出现 101 。
现在给定一个整数区间 [l,r] ,请问这个区间包含了多少个二进制不含 101 的整数?

输入描述

输入的唯一一行包含两个正整数 l, r( 1 ≤ l ≤ r ≤ 10^9)。

输出描述

输出的唯一一行包含一个整数,表示在 [l,r] 区间内一共有几个不含 101 的数。

输入1 10
输出8
说明区间 [1,10] 内, 5 的二进制表示为 101 ,10的二进制表示为 1010 ,因此区间 [ 1 , 10 ] 内有 10−2=8 个不含 101的数。
输入10 20
输出7
说明区间 [10,20] 内,满足条件的数字有 [12,14,15,16,17,18,19] 因此答案为 7。

源码和解析
解析:

思路1:
for循环暴力求解。十进制转二进制再转字符串。借助字符串的indexOf来判断是否包含。
这种方式就是区间过大时花费的时间会比较久一些。

示例代码(暴力破解):

public class T28 {public static void main(String[] args) {String input="1 10";int left=Integer.parseInt(input.split(" ")[0]);int right=Integer.parseInt(input.split(" ")[1]);int count=right-left+1;// 二进制不包含101的个数for(;left<=right;left++){if(Integer.toBinaryString(left).indexOf("101")!=-1){count--;}}System.out.println(count);}
}

当输入的值为10和20时,测试输出与结果如下图:
在这里插入图片描述
解析:

思路2:使用简单数位DP算法(数不再是数,而是由多个单字符组成的字符)进行求解
若对数位DP算法不懂的,可以参考我的另一篇博客
【算法】使用数位算法生成0至某个数之间的整数(for循环之外的另一种实现方式,蛮长见识的)

public class T28 {public static int raw[] = null;public static int num[] = null;public static int count = 0;public static void main(String[] args) {String input = "20 50";int left = Integer.parseInt(input.split(" ")[0]);int right = Integer.parseInt(input.split(" ")[1]);int totalCount = right - left + 1;// 二进制不包含101的个数handle(left - 1);int leftCount = count;count = 0;handle(right);int rightCount = count;System.out.println(totalCount - (rightCount - leftCount));}public static void handle(int number) {int len = (number + "").length();raw = new int[len];num = new int[len];for (int i = 0; i < len; i++) {raw[i] = number % 10;number /= 10;}dfs(len - 1, true);}static StringBuilder sb = new StringBuilder();public static void dfs(int p, boolean limit) {if (p < 0) {for (int i = num.length - 1; i >= 0; i--) {sb.append(num[i]);}if (Integer.toBinaryString(Integer.parseInt(sb.toString())).indexOf("101") != -1) {count++;}sb.setLength(0);return;}int up = limit ? raw[p] : 9;for (int i = 0; i <= up; i++) {num[p] = i;dfs(p - 1, limit&&i==up);}}
}

算法时间比较:

输入算法输出耗时
1 10数位DP8481000纳秒
1 10暴力破解8454500纳秒
10 20数位DP7507200纳秒
10 20暴力破解7445800纳秒
2000 5000000数位DP376367622331000纳秒
2000 5000000暴力破解376367230676000纳秒

从时间的角度来说,这里并未充分发挥出数位DP算法的优势。但是数位DP算法对数字的长度限制会小很多。

相关文章:

华为OD机试之不含101的整数(Java源码)

不含101的数 题目描述 小明在学习二进制时&#xff0c;发现了一类不含 101的数&#xff0c;也就是&#xff1a; 将数字用二进制表示&#xff0c;不能出现 101 。 现在给定一个整数区间 [l,r] &#xff0c;请问这个区间包含了多少个二进制不含 101 的整数&#xff1f; 输入描述…...

SpringCloud Ribbon 学习

SpringCloud Ribbon 学习 文章目录 SpringCloud Ribbon 学习1. Ribbon 是什么&#xff1f;2. LB(Load Balance)3 Ribbon 架构图&机制4 Ribbon 常见负载均衡算法5 测试 1. Ribbon 是什么&#xff1f; Spring Cloud Ribbon 是基于 Netflix Ribbon 实现的一套客户端 负载均衡…...

预告:XuperOS Global 国际化进展

XuperOS新年致辞中&#xff0c;我们提到XuperOS成长计划的最后一个阶段是国际化。伴随前三个阶段创世、监督、共建先后落地&#xff0c;很多用户特来咨询XuperOS国际化进展&#xff0c;我们在此统一说明。 按照之前的规划&#xff0c;XuperOS将在海外部署一条新的开放链XuperOS…...

炫技操作--递归实现翻转链表(java)

递归实现链表的逆序 leetcode 206题。 翻转链表递归解法普通方式实现链表翻转链表专题 leetcode 206题。 翻转链表 leetcode链接用于测试 题目&#xff1a;描述 将一个链表翻转&#xff1a; 输入&#xff1a;head [1,2,3,4,5] 输出&#xff1a;[5,4,3,2,1] 递归解法 解题思路…...

华为OD机试真题 Java 实现【求最小公倍数】【牛客练习题】

一、题目描述 正整数A和正整数B 的最小公倍数是指 能被A和B整除的最小的正整数值&#xff0c;设计一个算法&#xff0c;求输入A和B的最小公倍数。 数据范围&#xff1a;1≤a,b≤100000 。 二、输入描述 输入两个正整数A和B。 三、输出描述 输出A和B的最小公倍数。 四、解…...

[java]两数之和 II - 输入有序数组

两数之和 II - 输入有序数组 leetcode 167 原题链接解题思路解题代码排序专题 leetcode 167 原题链接 167. 两数之和 II - 输入有序数组 – 原题链接 题目描述: 给你一个下标从 1 开始的整数数组 numbers &#xff0c;该数组已按 非递减顺序排列 &#xff0c;请你从数组中找出…...

Linux-0.11 boot目录head.s详解

Linux-0.11 boot目录head.s详解 模块简介 在head.s中&#xff0c;操作系统主要做了如下几件事&#xff1a; 重新设置中断描述符和全局描述符检查A20地址线是否开启检查数学协处理器初始化页表并开启分页跳转到main函数执行 过程详解 重新设置IDT和GDT 在setup.s中我们已经…...

离散数学_十章-图 ( 3 ):由旧图构造新图

&#x1f4f7;10.3 由旧图构造新图 概念1. 子图2. 真子图3. 导出的子图 旧图构造新图的方法1. 删除或增加图中的边2. 边的收缩3. 删除顶点 有时解决问题只需要图的一部分。 比如我们现在只关心大型计算机网络中涉及济南&#xff0c;广州&#xff0c;深圳的计算机中心&#xff0…...

Golang每日一练(leetDay0083) 汇总区间、多数元素II

目录 228. 汇总区间 Summary Ranges &#x1f31f; 229. 多数元素 II Majority Element ii &#x1f31f;&#x1f31f; &#x1f31f; 每日一练刷题专栏 &#x1f31f; Rust每日一练 专栏 Golang每日一练 专栏 Python每日一练 专栏 C/C每日一练 专栏 Java每日一练 专…...

JAVA数组基础

目录 一、使用方式 1-动态初始化 ①先声明数组 ② 创建数组 ③分配方式 二、使用方式 2-静态初始化&#xff08;直接在声明的同时初始化{ } &#xff09; 三、数组使用注意事项和细节 四、数组两种初始化方式都是将内存空间分配到堆上面的 一、使用方式 1-动态初始化 …...

Linux-0.11 文件系统exec.c详解

Linux-0.11 文件系统exec.c详解 模块简介 该模块实现了二进制可执行文件和shell脚本文件的加载和执行。 函数详解 create_tables static unsigned long * create_tables(char * p,int argc,int envc)该函数的作用是建立参数和环境变量指针表。 create_table的作用就是建立…...

NET框架程序设计-第1章.NET框架开发平台体系架构

1.1 .NET 框架基本组成 .NET 框架的核心便是通用语言运行时&#xff08;Commomn Language Runtime&#xff0c;简称 CLR&#xff09;&#xff0c;CLR 是一个可被各种不同的编程语言所使用的运行时。 托管模块(mangaed module)&#xff1a; 一个需要 CLR 才能执行的标准 Window…...

(哈希表 ) 349. 两个数组的交集 ——【Leetcode每日一题】

❓349. 两个数组的交集 难度&#xff1a;简单 给定两个数组 nums1 和 nums2 &#xff0c;返回 它们的交集 。输出结果中的每个元素一定是 唯一 的。我们可以 不考虑输出结果的顺序 。 示例 1&#xff1a; 输入&#xff1a;nums1 [1,2,2,1], nums2 [2,2] 输出&#xff1a;[…...

JavaScript基本语法(二)

JavaScript基本语法 1、变量1.1、简介1.2、变量命名规则1.3、JS的关键字和保留字1.4、声明提升 2、JavaScript数据类型2.1、基本类型2.2、引用类型2.3、两种类型的区别2.4、字符串常用方法 3、数据类型转换 1、变量 1.1、简介 在 JavaScript 中声明一个新变量的方法是使用关键…...

ChatGPT3.5-4资源汇总,直连无梯子

什么是ChatGPT? ChatGPT&#xff0c;全称&#xff1a;聊天生成预训练转换器&#xff08;英语&#xff1a;Chat Generative Pre-trained Transformer&#xff09;&#xff0c;是OpenAI开发的人工智能聊天机器人程序&#xff0c;于2022年11月推出。该程序使用基于GPT-3.5、GPT-4…...

【Netty】使用 SSL/TLS 加密 Netty 程序(二十)

文章目录 前言一、SSL/TLS概述二、Sslhandler类 前言 回顾Netty系列文章&#xff1a; Netty 概述&#xff08;一&#xff09;Netty 架构设计&#xff08;二&#xff09;Netty Channel 概述&#xff08;三&#xff09;Netty ChannelHandler&#xff08;四&#xff09;ChannelP…...

runway gen2

来自Runway文生成视频ai大模型Gen-2_哔哩哔哩_bilibili来自Runway文生成视频ai大模型Gen-2&#xff0c;距离视频制作自由又近了一步。, 视频播放量 1651、弹幕量 0、点赞数 21、投硬币枚数 2、收藏人数 42、转发人数 22, 视频作者 旭升说, 作者简介 一起聊下互联网的那些事&…...

Day2:Windows网络编程-TCP

今天开始进入Windows网络编程的学习&#xff0c;在学习的时候总是陷入Windows复杂的参数&#xff0c;纠结于这些。从老师的讲解中&#xff0c;这些内容属于是定式&#xff0c;主要学习写的逻辑。给自己提个醒&#xff0c;要把精力放在正确的位置&#xff0c;不要无端耗费精力。…...

leetcode1985. 找出数组中的第 K 大整数

给你一个字符串数组 nums 和一个整数 k 。nums 中的每个字符串都表示一个不含前导零的整数。 返回 nums 中表示第 k 大整数的字符串。 注意&#xff1a;重复的数字在统计时会视为不同元素考虑。例如&#xff0c;如果 nums 是 ["1","2","2"]&am…...

基于深度学习的高精度野生动物检测识别系统(PyTorch+Pyside6+YOLOv5模型)

摘要&#xff1a;基于深度学习的高精度野生动物检测&#xff08;水牛、犀牛、斑马和大象&#xff09;识别系统可用于日常生活中或野外来检测与定位野生动物目标&#xff0c;利用深度学习算法可实现图片、视频、摄像头等方式的野生动物目标检测识别&#xff0c;另外支持结果可视…...

浏览器访问 AWS ECS 上部署的 Docker 容器(监听 80 端口)

✅ 一、ECS 服务配置 Dockerfile 确保监听 80 端口 EXPOSE 80 CMD ["nginx", "-g", "daemon off;"]或 EXPOSE 80 CMD ["python3", "-m", "http.server", "80"]任务定义&#xff08;Task Definition&…...

Spark 之 入门讲解详细版(1)

1、简介 1.1 Spark简介 Spark是加州大学伯克利分校AMP实验室&#xff08;Algorithms, Machines, and People Lab&#xff09;开发通用内存并行计算框架。Spark在2013年6月进入Apache成为孵化项目&#xff0c;8个月后成为Apache顶级项目&#xff0c;速度之快足见过人之处&…...

云启出海,智联未来|阿里云网络「企业出海」系列客户沙龙上海站圆满落地

借阿里云中企出海大会的东风&#xff0c;以**「云启出海&#xff0c;智联未来&#xff5c;打造安全可靠的出海云网络引擎」为主题的阿里云企业出海客户沙龙云网络&安全专场于5.28日下午在上海顺利举办&#xff0c;现场吸引了来自携程、小红书、米哈游、哔哩哔哩、波克城市、…...

Leetcode 3577. Count the Number of Computer Unlocking Permutations

Leetcode 3577. Count the Number of Computer Unlocking Permutations 1. 解题思路2. 代码实现 题目链接&#xff1a;3577. Count the Number of Computer Unlocking Permutations 1. 解题思路 这一题其实就是一个脑筋急转弯&#xff0c;要想要能够将所有的电脑解锁&#x…...

Cilium动手实验室: 精通之旅---20.Isovalent Enterprise for Cilium: Zero Trust Visibility

Cilium动手实验室: 精通之旅---20.Isovalent Enterprise for Cilium: Zero Trust Visibility 1. 实验室环境1.1 实验室环境1.2 小测试 2. The Endor System2.1 部署应用2.2 检查现有策略 3. Cilium 策略实体3.1 创建 allow-all 网络策略3.2 在 Hubble CLI 中验证网络策略源3.3 …...

定时器任务——若依源码分析

分析util包下面的工具类schedule utils&#xff1a; ScheduleUtils 是若依中用于与 Quartz 框架交互的工具类&#xff0c;封装了定时任务的 创建、更新、暂停、删除等核心逻辑。 createScheduleJob createScheduleJob 用于将任务注册到 Quartz&#xff0c;先构建任务的 JobD…...

LLM基础1_语言模型如何处理文本

基于GitHub项目&#xff1a;https://github.com/datawhalechina/llms-from-scratch-cn 工具介绍 tiktoken&#xff1a;OpenAI开发的专业"分词器" torch&#xff1a;Facebook开发的强力计算引擎&#xff0c;相当于超级计算器 理解词嵌入&#xff1a;给词语画"…...

在Ubuntu24上采用Wine打开SourceInsight

1. 安装wine sudo apt install wine 2. 安装32位库支持,SourceInsight是32位程序 sudo dpkg --add-architecture i386 sudo apt update sudo apt install wine32:i386 3. 验证安装 wine --version 4. 安装必要的字体和库(解决显示问题) sudo apt install fonts-wqy…...

Yolov8 目标检测蒸馏学习记录

yolov8系列模型蒸馏基本流程&#xff0c;代码下载&#xff1a;这里本人提交了一个demo:djdll/Yolov8_Distillation: Yolov8轻量化_蒸馏代码实现 在轻量化模型设计中&#xff0c;**知识蒸馏&#xff08;Knowledge Distillation&#xff09;**被广泛应用&#xff0c;作为提升模型…...

动态 Web 开发技术入门篇

一、HTTP 协议核心 1.1 HTTP 基础 协议全称 &#xff1a;HyperText Transfer Protocol&#xff08;超文本传输协议&#xff09; 默认端口 &#xff1a;HTTP 使用 80 端口&#xff0c;HTTPS 使用 443 端口。 请求方法 &#xff1a; GET &#xff1a;用于获取资源&#xff0c;…...