求最大递增数
描述: |
输入一串数字,找到其中包含的最大递增数。递增数是指相邻的数位从小到大排列的数字。如: 2895345323,递增数有:289,345,23, 那么最大的递减数为345。 |
运行时间限制: | 无限制 |
内存限制: | 无限制 |
输入: |
输入一串数字,默认这串数字是正确的,即里面不含有字符/空格等情况 |
输出: |
输出最大递增数 |
样例输入: |
123526897215 |
样例输出: |
2689 |
思路:
我看到这道题的第一反应就是先把一组数中的递增数全部找出来,然后在所有递增数中找出最大的,这个思路的难点在于每个递增数的存储,开始想到数组,个数不能确定,所以只能用集合(选了ArrayList),再后来就是让人头疼的边界问题,字符串与整形数的转换问题。结果在自己的机子上运行成功,但在华为平台提交后还是有部分用例未通过,还请哪位朋友帮忙指正。
package com.liuhao; import java.io.*; import java.util.ArrayList; import java.util.List; public class MaxIncrease { public static void main(String[] args) throws IOException{ BufferedReader br = new BufferedReader(new InputStreamReader(System.in)); String str = br.readLine(); char[] charArr = str.toCharArray(); int result = 0; str = ""; List<String> arrayList = new ArrayList<String>(); for(int i=0; i<charArr.length-1; i++){ if(str.length() == 0){ str += charArr[i]; } if (charArr[i+1] > charArr[i] ){ str += charArr[i+1]; } else { if(str.length() > 1){ arrayList.add(str); } str = ""; } } arrayList.add(str); int[] a = new int[arrayList.size()]; for(int i=0; i<arrayList.size(); i++){ if(arrayList.get(i).length() != 0){ a[i] = Integer.parseInt(arrayList.get(i)); } } for(int i=0; i<a.length; i++){ if(a[i] > result){ result = a[i]; } } System.out.println(result); } }
显然,第一个思路显得臃肿拖沓。后来结合网上的一些资料整理了下面的精简版,我觉得这段代码的边界处理的比较精巧,不简单。
package com.liuhao; import java.io.BufferedReader; import java.io.IOException; import java.io.InputStreamReader; public class MaxIncrease2 { public static void main(String[] args) throws IOException { BufferedReader br = new BufferedReader(new InputStreamReader(System.in)); String str = br.readLine(); char[] charArr = str.toCharArray(); //用于存放最大的递增数 int maxNum = 0; //str用做读入数据后边没用其他用处,就可以拿来放临时递增数 str = ""; for (int i=0; i<charArr.length; i++){ //将当前i指向的字符存到字符串中 if (str.length() ==0){ str += charArr[i]; } //题目巧合,恰好是比较一位的字符串,若是两位之上遍不可以直接比较字符 //如果第二个大于第一个,将第二个也存放到str中 //注意if的第一个条件 ***i < charArr.length-1*** if (i < charArr.length-1 && charArr[i+1] > charArr[i]){ str += charArr[i+1]; } //若不满足,表明当前递增数结束 //对该数进行比较,存储 else { int temp = Integer.parseInt(str); if(temp > maxNum){ maxNum = temp; } str = ""; } } System.out.println(maxNum); } }
相关推荐
标题“华为南京研究所机考练习-亮着电灯的盏数”所指的是一场编程考试或面试题目,其中可能涉及到计算机科学中的算法和逻辑思维。这类问题通常要求编写程序来解决特定的问题,例如在这个例子中,可能是关于灯的状态...
标题中的“华为南京研究所机考练习-从考试成绩中划出及格线”指的是一个编程练习,可能是华为在招聘或培训过程中对候选人进行的技术考核的一部分。这个练习可能要求考生编写程序,从一组考试成绩中自动确定及格分数...
总的来说,【华为机考100题-带答案】是一份全面的复习资料,对于准备华为认证考试的考生而言,通过系统地练习和学习,可以有效地提升自己的技术水平和应试能力。同时,它也是检验自我学习成果和查漏补缺的良好工具。...
华为机考练习试题汇总
华为作为全球知名的ICT解决方案提供商,其在电子设计与集成电路领域有着深厚的积累,每年都会举行针对FPGA(Field-Programmable Gate Array,现场可编程门阵列)和数字IC(Digital Integrated Circuits,数字集成...
### 华为机考一本通-2024:OD岗位与机考攻略详解 #### 一、华为OD岗位解析 ##### 1.1 OD岗位介绍 - **岗位性质**:OD岗位即华为与德科合作的精英研发项目,与传统外包项目不同,OD岗位在华为内部具有更高的地位和...
"华为机考试题+答案参照.pdf" 本资源是一个华为机考试题集,涵盖了多个IT领域的知识点,包括算法、数据结构、操作系统等。本文将对每个题目进行详细的解释和分析。 1. 评委打分问题: * 知识点:算法、数组操作 ...
题目要求对输入数组进行排序,并根据数组长度的奇偶性将最大值放置于特定位置,随后按降序重新排列数组。 #### 代码分析: ```cpp #include void sort(int input[], int n, int output[]) { // 对输入数组进行...
华为校招硬件技术工程师机考试卷试题包括答案.docx
### 华为OD机考100题之五键键盘输出问题 #### 问题背景与描述 本题目属于算法设计类题目,旨在考察考生对于键盘输入处理的理解以及基本的编程能力。题目要求根据一系列给定的键盘输入指令,模拟一个特殊键盘的操作...
华为机考练习攻略及注意事项
### 华为OD机考攻略知识点详析 #### 一、机考介绍 - **考试形式**:华为OD机考采用在线形式,考试平台为牛客网。 - **试题构成**:考试包含三道算法题,其中两道简单题各占100分,一道中等难度题占200分,总分400...
### 华为-热设计培训教材知识点总结 #### 一、热设计基础知识 **1. 热量传递的三种基本方式** - **导热**:指物体内部或两个固体接触面上,由于微观粒子(如分子、原子或自由电子)的热运动而产生的热量传递现象...
华为OD机考是华为公司针对求职者进行技术能力评估的一种方式,主要测试应聘者的编程技能。这个压缩包包含了四个部分,分别标记为ABCD卷,涵盖了四种编程语言:Java、C++、JavaScript和Python。这些语言在现代软件...
### 华为校招硬件岗,电源岗笔试题解析 #### 题目1:压敏电阻选型原则 **题目描述**:压敏电阻选型需满足:压敏电压 \(U_c >\) 最大持续工作电压 \(U_{max} >\) 额定工作电压 \(U_n\);绝不允许 \(U_c\) 低于被...
在准备华为OD机考的过程中,不仅要理解这些知识点,还要通过大量的练习来提高解题速度和准确性。在阅读和练习题目时,先尝试自己解决问题,然后再对照答案,这样可以更有效地评估自己的学习进度和理解程度。
【华为OD机考2023试题】涉及的IT知识点主要涵盖算法设计、字符串处理、游戏逻辑、日志管理、链表操作以及优化问题解决。下面将分别详细讲解这些知识点。 1. **任务混部问题**: 这是一道典型的资源调度优化问题,...