2021/6/19 华为OD机考
浏览器一定只能保留机考那一个页面!
浏览器一定只能保留机考那一个页面!!
浏览器一定只能保留机考那一个页面!!!
第一题
很简单的一道题,输入一个整型数组,找出其中出现次数超过一半以上的元素,输出该元素。
比如:
输入:
1,5,9,5,5,4,8,5,5
输出:
5
第二题 求最后一个单词的长度
也是一道简单题,输入一个字符串,字符串仅由字母和空格组成,空格隔开的就是单词,求最后一个单词的长度。比如
输入:
hello world
输出:
5
第三题 比较两个版本号的大小
在 leetcode 上有类似的题:165. 比较版本号
输入两个版本号 version1 和 version2,每个版本号由多个子版本号组成。子版本号之间由 “.” 隔开,由大小写字母、数字组成,并且至少有一个字符。
按从左到右的顺序比较子版本号,比较规则如下:
- 子版本号前面的0不参与比较,比如
001和1是相等的。 - 小写字母 > 大写字母 > 数字
- 空字符和0相等,比如
1和1.0相等
比较结果:
- 如果 version1 > version2 ,返回 1
- 如果 version1 < version2 ,返回-1
- 其他情况返回0
实例1:
输入: 5.2 5.1a 输出: 1
实例2:
输入: 5.6.1 5.6.2a 输出: -1
实例3:
输入: 5.6.8.a 5.6.8.0a 输出: 0
需要注意的坑:
str,split("\\."),记得要转义分隔符- 两个版本号的子版本号数量可能不一样
- 子版本号长度不一样
我的代码实现:
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
// 输入数据
Scanner in = new Scanner(System.in);
String v1 = in.next();
String v2 = in.next();
// 去掉连接符
String[] arr1 = v1.split("\\.");
String[] arr2 = v2.split("\\.");
int len1 = arr1.length;
int len2 = arr2.length;;
// 两两比较
for(int i=0; i<len1 && i<len2; i++){
int res = helper(arr1[i], arr2[i]);
if(res != 0) {
System.out.println(res);
return;
}
}
// arr1 长
if(len1 > len2){
int k = len2;
while(k < len1){
int res = helper(arr1[k],"");
if(res != 0) {
System.out.println(res);
return;
}
k++;
}
System.out.println(0);
return;
}
// arr2 长
if(len2 > len1){
int k = len1;
while(k < len2){
int res = helper("",arr2[k]);
if(res != 0) {
System.out.println(res);
return;
}
k++;
}
System.out.println(0);
return;
}
System.out.println(0);
}
// 比较两个字版本号的大小
public static int helper(String v1, String v2){
// 1. 先删除子版本号前面的0
StringBuilder sb1 = new StringBuilder(v1);
while(sb1.length() > 0 && sb1.charAt(0) == '0'){
sb1.deleteCharAt(0);
}
StringBuilder sb2 = new StringBuilder(v2);
while(sb2.length() > 0 && sb2.charAt(0) == '0'){
sb2.deleteCharAt(0);
}
// 2. 逐个字符比较
for(int i=0; i<sb1.length() && i<sb2.length(); i++){
if(sb1.charAt(i) > sb2.charAt(i)) return 1;
else if(sb1.charAt(i) < sb2.charAt(i)) return -1;
}
// 3. sb1 更长
int len1 = sb1.length();
int len2 = sb2.length();
if(len1 > len2) {
int k = len2;
while(k<len1){
if(sb1.charAt(k) > '0') return 1;
k++;
}
return 0;
}
// sb2 更长
if(len2 > len1) {
int k = len1;
while(k<len2){
if(sb2.charAt(k) > '0') return -1;
k++;
}
return 0;
}
return 0;
}
}#笔试题目##华为#
查看20道真题和解析