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; } }#笔试题目##华为#