2021/6/19 华为OD机考

浏览器一定只能保留机考那一个页面!
浏览器一定只能保留机考那一个页面!!
浏览器一定只能保留机考那一个页面!!!

第一题

很简单的一道题,输入一个整型数组,找出其中出现次数超过一半以上的元素,输出该元素。

比如:

输入:

1,5,9,5,5,4,8,5,5

输出:

5

第二题 求最后一个单词的长度

也是一道简单题,输入一个字符串,字符串仅由字母和空格组成,空格隔开的就是单词,求最后一个单词的长度。比如

输入:

hello world

输出:

5

第三题 比较两个版本号的大小

在 leetcode 上有类似的题:165. 比较版本号

输入两个版本号 version1 和 version2,每个版本号由多个子版本号组成。子版本号之间由 “.” 隔开,由大小写字母、数字组成,并且至少有一个字符。

按从左到右的顺序比较子版本号,比较规则如下:

  • 子版本号前面的0不参与比较,比如 0011 是相等的。
  • 小写字母 > 大写字母 > 数字
  • 空字符和0相等,比如 11.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;
    }
}
#笔试题目##华为#
全部评论
为什么楼主的这么简单,果然人品重要
5 回复 分享
发布于 2021-07-23 22:37
private int compareVersion(String s1, String s2) {         String[] ss1 = s1.split("\\.");         String[] ss2 = s2.split("\\.");         for (int i = 0; i < Math.max(ss1.length, ss2.length); i++) {             String v1 = "0",v2 = "0";             if(i < ss1.length){                 v1 = getV(ss1[i]);             }             if(i < ss2.length){                 v2 = getV(ss2[i]);             }             if(v1.compareTo(v2) != 0){                 return v1.compareTo(v2) > 0 ? 1 : -1;             }         }         return 0;     }
1 回复 分享
发布于 2022-04-17 12:54
楼主什么岗位啊
点赞 回复 分享
发布于 2021-07-05 16:38
楼主投的哪个部门
点赞 回复 分享
发布于 2021-07-23 13:17
你这也太简单了吧,我的是动态规划,很难,但是做对了两道,面试是二叉树加链表,非常难
点赞 回复 分享
发布于 2021-08-07 15:58
楼主过了吗
点赞 回复 分享
发布于 2021-10-01 12:54
我去你这题也太简单了,用python每道题几分钟就能AC出来,JAVA可能要自己造轮子
点赞 回复 分享
发布于 2021-10-12 01:27
这三道是人能随机到的题,也太简单了吧!!!
点赞 回复 分享
发布于 2022-04-04 16:10

相关推荐

球球别再泡了:坏,我单9要了14
点赞 评论 收藏
分享
9 74 评论
分享
牛客网
牛客企业服务