【Java】 剑指offer(44) 连续子数组的最大和
本文参考自《剑指offer》一书,代码采用Java语言。
题目
数字以0123456789101112131415…的格式序列化到一个字符序列中。在这个序列中,第5位(从0开始计数)是5,第13位是1,第19位是4,等等。请写一个函数求任意位对应的数字。
思路
逐一枚举数字,计算每个数字的位数相加,效率太低。
观察规律:
个位数的个数一共有10个,即0~9,共占了10*1位数字;
两位数的个数一共有90个,即10~99,每个数字占两位,共占了90*2位数字;
……
m位数的个数一共有9*10^(m-1)个,每个数字占m位,占了9*10^(m-1)*m位数字。
判断第n个对的数字是属于几位数,再从几位数中进行寻找。
测试算例
1.功能测试(输入19、1000等)
2.边界值测试(输入0、1等)
Java代码
//题目:数字以0123456789101112131415…的格式序列化到一个字符序列中。在这
//个序列中,第5位(从0开始计数)是5,第13位是1,第19位是4,等等。请写一
//个函数求任意位对应的数字。 public class DigitsInSequenc {
public int digitAtIndex(int index) {
if(index<0)
return -1;
int m=1; //m位数
while(true) {
int numbers=numbersOfIntegers(m); //m位数的个数
if(index<numbers*m)
return getDigit(index,m);
index-=numbers*m;
m++;
}
} /*
* 返回m位数的总个数
* 例如,两位数一共有90个:10~99;三位数有900个:100~999
*/
private int numbersOfIntegers(int m) {
if(m==1)
return 10;
return (int) (9*Math.pow(10, m-1));
} /*
* 获取数字
*/
private int getDigit(int index, int m) {
int number=getFirstNumber(m)+index/m; //对应的m位数
int indexFromRight = m-index%m; //在数字中的位置
for(int i=1;i<indexFromRight;i++)
number/=10;
return number%10;
} /*
* 第一个m位数
* 例如第一个两位数是10,第一个三位数是100
*/
private int getFirstNumber(int m) {
if(m==1)
return 0;
return (int) Math.pow(10, m-1);
} public static void main(String[] args) {
DigitsInSequenc demo=new DigitsInSequenc();
System.out.println(demo.digitAtIndex(0)==0);
System.out.println(demo.digitAtIndex(1)==1);
System.out.println(demo.digitAtIndex(19)==4);
System.out.println(demo.digitAtIndex(1000)==3);
System.out.println(demo.digitAtIndex(1001)==7);
System.out.println(demo.digitAtIndex(1002)==0);
}
}
收获
1.程序逻辑要整理清楚,细节要注意
【Java】 剑指offer(44) 连续子数组的最大和的更多相关文章
- 剑指offer——44连续子数组的最大和
题目描述 HZ偶尔会拿些专业问题来忽悠那些非计算机专业的同学.今天测试组开完会后,他又发话了:在古老的一维模式识别中,常常需要计算连续子向量的最大和,当向量全为正数的时候,问题很好解决.但是,如果向量 ...
- 剑指 Offer 42. 连续子数组的最大和 + 动态规划
剑指 Offer 42. 连续子数组的最大和 题目链接 状态定义: 设动态规划列表 \(dp\) ,\(dp[i]\) 代表以元素 \(4nums[i]\) 为结尾的连续子数组最大和. 为何定义最大和 ...
- 刷题-力扣-剑指 Offer 42. 连续子数组的最大和
剑指 Offer 42. 连续子数组的最大和 题目链接 来源:力扣(LeetCode) 链接:https://leetcode-cn.com/problems/lian-xu-zi-shu-zu-de ...
- 力扣 - 剑指 Offer 42. 连续子数组的最大和
题目 剑指 Offer 42. 连续子数组的最大和 思路1(分析数组的规律) 我们可以从头到尾逐个累加,若之前的累加和小于0,那就从丢弃之前的累加,从当前开始重新累加,同时在遍历过程中比较记录下最大值 ...
- 【剑指Offer】连续子数组的最大和 解题报告(Python)
[剑指Offer]连续子数组的最大和 解题报告(Python) 标签(空格分隔): 剑指Offer 题目地址:https://www.nowcoder.com/ta/coding-interviews ...
- 《剑指Offer》- 连续子数组的最大和或最小和
前言 本文是<剑指Offer>系列(JavaScript版)的第一篇,题目是"连续子数组的最大和或最小和". 话不多说,开始"打怪"修炼... 一. ...
- 【Java】 剑指offer(42) 连续子数组的最大和
本文参考自<剑指offer>一书,代码采用Java语言. 更多:<剑指Offer>Java实现合集 题目 输入一个整型数组,数组里有正数也有负数.数组中一个或连续的多个整/ ...
- Go语言实现:【剑指offer】连续子数组的最大和
该题目来源于牛客网<剑指offer>专题. HZ偶尔会拿些专业问题来忽悠那些非计算机专业的同学.今天测试组开完会后,他又发话了:在古老的一维模式识别中,常常需要计算连续子向量的最大和,当向 ...
- 【剑指offer】连续子数组的最大和
个開始,到第3个为止).你会不会被他忽悠住? 输入: 输入有多组数据,每组測试数据包括两行. 第一行为一个整数n(0<=n<=100000),当n=0时,输入结束.接下去的一行包括n个整数 ...
随机推荐
- 拿webshell权限方法(一)
概念 Webshell就是以asp,php,jsp或cgi等网页文件形式存在的一种命令执行环境,也可以将其称为一种网页后门. Access数据库拿webshell 首先看是否能找到网站漏洞进行网站的后 ...
- C语言文件操作详解
C语言中没有输入输出语句,所有的输入输出功能都用 ANSI C提供的一组标准库函数来实现.文件操作标准库函数有: 文件的打开操作 fopen 打开一个文件 文件的关闭操作 fclose 关闭一个文件 ...
- Python学习之not,and,or篇
Python学习之not,and,or篇 运算符示意 not –表示取反运算. and –表示取与运算. or –表示取或运算. 运算符优先级 not > and > or. 举例如下: ...
- android摄像头(camera)之 v4l2的c测试代码【转】
转自:https://blog.csdn.net/ldswfun/article/details/8745577 在移植android hal的过程中,移植的首要任务是要确保驱动完好,camera是属 ...
- Linux下rsyslog日志收集服务环境部署记录【转】
rsyslog 可以理解为多线程增强版的syslog. 在syslog的基础上扩展了很多其他功能,如数据库支持(MySQL.PostgreSQL.Oracle等).日志内容筛选.定义日志格式模板等.目 ...
- Oracle11g的database 和client的区别是什么?
由于工作需要,刚开始接触oracle数据库,完全小白,下载的时候看到有database和client两种类型可供下载,一时不知如何是好,于是网上询问得知其中区别,在此记录一下自己的无知. “datab ...
- mysql重置登录密码
1.停止mysql服务. services.msc进入服务界面 停止mysql服务 2.打开一个cmd窗口. 输入mysqld --skip-grant-tables 启动了一个新的mysql服务 跳 ...
- 003_饿了么chaosmonkey实现
背景 公司目前的服务设计大部分满足 design for failure 理念.随着业务复杂度的提升,我们很难再保证对系统故障的容错性.我们需要工具来验证服务的容错性,基于这个需求我们使用了 tc 工 ...
- 创建物理卷报错Can't open /dev/sdb5 exclusively. Mounted filesystem的问题解决过程记录
yum服务器lvm扩容,data目录是yum存放rpm包的目录,只有20G,需要添加磁盘扩容到80G # df -lh Filesystem Size Used Av ...
- Intellij IDEA14 搜索框及控制台乱码解决
搜索ctrl+F及ctrl+H的搜索框.调试的时候控制台.导入module都显示为为中文乱码 如下: 解决方案: File->Setting->IDE Settings->Appea ...