刷了3个月的华为OD算法题,总结了270多道,谈谈自己的感悟

news2024/9/27 9:29:53

在这里插入图片描述

目录

    • 一、考研二战,入职华为,反向调剂电子科大深圳
    • 二、题目描述
    • 三、输入描述
    • 四、输出描述
    • 五、解题思路
    • 六、Java算法源码
    • 七、效果展示
      • 1、输入
      • 2、输出
      • 3、说明

大家好,我是哪吒。

最近一直在刷华为OD机试的算法题,坚持一天三道题的节奏,已经三个多月了,刷了270多道题,刚开始也有过想放弃的想法,刷一道卡一道,一道题要用1小时,因为太菜了吗?哎,一言难尽

随着时间的推移,感觉自己慢慢上道了,一道题用不上1个小时了,哈哈,这就是进步嘛

一、考研二战,入职华为,反向调剂电子科大深圳

不经意间在网上看到一个帖子《考研二战,入职华为,反向调剂电子科大深圳》,写的真不错,分享给大家。

加入华为OD后,给我的感觉比想象中,或者说比网上大部分的说法都要好。

我觉得在这里能学到很多东西,毕竟是大公司,平台也大,能接触到的牛人也多。

我觉得一个初来乍到的应届本科生受到歧视也正常,周围都是名校硕博,作为一个新人我没有任何理由骄傲。技不如人甘拜下风,虚心一点好好学习也是好的。

另外,我觉得无论是校招进华为正式,还是社招进华为od,我感觉没有想象中区别那么明显。

技术岗还是靠实力说话。我们的od员工和正式员工办公上没有一点差别,甚至我们组的美本的正式员工第一个月都不知道我们之间有什么区别。

我的本科同班同学校招进华为的也搞不懂我工号和他们正式员工工号的区别。

我的od同事有7年的ios开发经验,是从隔壁某个体面的硬件大厂跳槽过来的,因为工作经验丰富,反而成为了我和一个正式员工(应届)的老师。

我相信以他的实力,一年期满很快就能完成转正。即便转正名额给他而不给我,我也服气的。

我觉得在华为有一个巨大的优势,就是信息上的优势。

毕竟是在华为,了解到的资讯都是第一手的,很多消息非常通畅。

比方说我之前在学校完全不能理解大公司是怎么招人的,而在这里通过别人的只言片语,能对这个流程有个初步的理解感受。

包括下文中我提到了解非全硕士的过程,华为这个平台也给我提供了第一手的信息。

对于我的朋友,行业外的肯定不会认可我的本科,但是我直接笼统地说我在华为工作,外行便会肃然起敬。

而行业内的人我稍微解释一下他们也能理解,行业内还是看你的技术的,我还是非常肯定我自己的专业实力的。

并且行业内也知道我的本科杭州电子科技大学是华为目标院校,可以直接华为校招成为正式员工的。

比方说我这个工作除了签协议是和德科公司签的以外,别的部分都挺完美的了:是软件开发的技术岗、华为核心部分、利于项目经验积累、待遇不错。

毕竟我就是正儿八经的华为的社招,错过了校招的正式招聘时间才只能和德科签合同的。

反正对于我来说,每个人要找到适合自己的,找到自己的需求。需要什么,就去拿什么。入职的这一个月见识到了很多东西,收获颇丰,进步巨大。每天都在不停地自我更新中,感觉很好。

关于华为od,网上诟病最多的就是转正华为正式员工部分了。甚至我曾经做过hr的表姐都告诫我,“千万别去华为od,因为od永远不可以转正。”

我多方打听,包括反复跟招我的人确定转正情况。对方答复说我们部门有30%的转正率。我也通过其他不可能跟招我的人有联系的人确认了下,确认这个部门的转正率确实是30%。这才让我足够信任他们。

然后我在本科学校杭电的校内群里联系了两个华为od的校友,他们都是入职一年就获得了转正资格。我觉得他们是利益相关者,所以他们的话只能信一半。

我的核心想法是,我来华为就是来提升进步的,既然有转正机会,那么我就应该进去试试。如果我没法转正,那么我应该华为校招的正式岗位也过不了。

如果放弃这个offer去别的公司,如海康。几年之后我大概率还是要跳槽来华为,那么既然华为的低端社招=od,那么我跳槽华为也只能当od。

下面分享一道2023 B卷 朋友抽中题 二维伞的雨滴效应:

二、题目描述

普通的伞在二维平面世界中,左右两侧均有一条边,而两侧伞边最下面各有一个伞坠子,雨滴落到伞面,逐步流到伞坠处,会将伞坠的信息携带并落到地面,随着日积月累,地面会呈现伞坠的信息。

1、为了模拟伞状雨滴效应,用二叉树来模拟二维平面伞(如下图所示),现在输入一串正整数数组序列(不含0,数组成员至少是1个),若此数组序列是二叉搜索树的前序遍历结果,那么请输出一个返回值1,否则输出0。

2、同时请将此序列构成的伞状效应携带到地面的数组信息输出(左边伞坠信息,右边伞坠信息,详细参考示例图地面上的数字),若此树不存在左右坠,则对应位置返回0,。同时若非二叉排序树,那么左右伞坠信息也返回0。

在这里插入图片描述

三、输入描述

1个通过空格分割的整数序列字符串,数组不含0,数组成员至少1个,输入的数组的任意两个数字都互不相同,最多1000个
正整数,正整数取值范围1~65535。

四、输出描述

输出如下三个值,以空格分割:是否是二叉排序树,左侧地面呈现的伞坠数字值,右侧地面呈现的伞坠数字值。
若是二叉排序树,则输出1,否则输出0。

若不存在左侧或右侧伞坠值,那么对应伞坠值直接输出0。

五、解题思路

二叉搜索树又称二叉排序树,具有以下性质:

  1. 若它的左子树不为空,则左子树上所有节点的值都小于根节点的值;
  2. 若它的右子树不为空,则右子树上所有节点的值都大于根节点的值;
  3. 它的左右子树也分别为二叉搜索树;

二叉搜索树就不能插入重复的元素了,且每次插入都是插入到叶子节点的位置。

插入的元素比当前位置元素小就往左走,比当前位置元素大就往右走,直到为空。

六、Java算法源码

package com.guor.od;

import java.util.Scanner;
import java.util.*;

public class OdTest01 {
    /*
     * 二叉搜索树:
     * 若它的左子树不为空,则左子树上所有节点的值都小于根节点的值;
     * 若它的右子树不为空,则右子树上所有节点的值都大于根节点的值;
     */
    public static void main(String[] args) {
        Scanner in = new Scanner(System.in);
        // 输入的节点值
        int[] arr = Arrays.stream(in.nextLine().split(" ")).mapToInt(Integer::parseInt).toArray();
        // 第一个节点为根节点
        TreeNode root = new TreeNode(arr[0]);

        // 保存节点
        Deque<TreeNode> deque = new ArrayDeque<TreeNode>();
        // 加入根节点
        deque.push(root);
        // 当前节点的前一个节点
        TreeNode preNode = new TreeNode(-1);
        // 是否满足二叉搜索树属性
        boolean flag = true;
        // 判断并构造二叉搜索树
        for (int i = 1; i < arr.length; i++) {
            // 当前节点的前一个节点
            TreeNode node = deque.peekLast();
            // 当前节点
            TreeNode currentNode = new TreeNode(arr[i]);
            // 前一个节点的值小于当前节点的值
            while (!deque.isEmpty() && deque.peekLast().value < currentNode.value) {
                node = deque.removeLast();
                // 如果队列不为空,更新前一个节点值
                if (!deque.isEmpty()) {
                    preNode = deque.peekLast();
                }
            }

            // 小的值放在左子树
            if (node.value < currentNode.value) {
                node.right = currentNode;
                preNode = node;
            } else {
                // 不满足二叉搜索树属性直接跳出
                if (currentNode.value < preNode.value) {
                    flag = false;
                    break;
                }
                // 大的值放在右子树
                node.left = currentNode;
            }
            // 将当前的值加入队列
            deque.addLast(currentNode);
        }

        // 如果满足二叉搜索树特性,获取左子树的最左节点,右子树的最右节点
        if (flag) {
            TreeNode leftNode = root;
            while (leftNode.left != null || leftNode.right != null) {

                if (leftNode.left != null) {
                    leftNode = leftNode.left;
                } else {
                    leftNode = leftNode.right;
                }
            }
            TreeNode rightNode = root;
            while (rightNode.left != null || rightNode.right != null) {

                if (rightNode.right != null) {
                    rightNode = rightNode.right;
                } else {
                    rightNode = rightNode.left;
                }
            }

            // 1 表示符合二叉搜索树
            // leftNode 左侧地面呈现的伞坠数字值
            // rightNode 右侧地面呈现的伞坠数字值
            StringBuilder builder = new StringBuilder();
            builder.append(1).append(" ")
                    .append(leftNode.value == root.value ? 0 : leftNode.value).append(" ")
                    .append(rightNode.value == root.value ? 0 : rightNode.value);
            System.out.println(builder);
        } else {
            // 不符合二叉搜索树时直接输出0
            System.out.println("0 0 0");
        }
        return;
    }

    // 定义一棵树
    static class TreeNode {

        private int value;
        private TreeNode left;
        private TreeNode right;

        public TreeNode(int value) {
            this.value = value;
        }
    }
}

七、效果展示

1、输入

6 4 3 5 8 7 9 10

2、输出

1 3 10

3、说明

6 4 3 5 8 7 9 10能够组成一个二叉搜索树,输出左侧地面呈现的伞坠数字值3,右侧地面呈现的伞坠数字值10。

在这里插入图片描述


🏆下一篇:华为OD机试真题 Java 实现【跳房子II】【2023 B卷 100分】,附详细解题思路

🏆本文收录于,华为OD机试(JAVA)真题(A卷+B卷)

刷的越多,抽中的概率越大,每一题都有详细的答题思路、详细的代码注释、样例测试,订阅后,专栏内的文章都可看,发现新题目,随时更新,全天CSDN在线答疑。

在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/838429.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

计算机网络(6) --- https协议

计算机网络&#xff08;5&#xff09; --- http协议_哈里沃克的博客-CSDN博客http协议https://blog.csdn.net/m0_63488627/article/details/132089130?spm1001.2014.3001.5501 目录 1.HTTPS的出现 1.HTTPS协议介绍 2.补充概念 1.加密 1.解释 2.原因 3.加密方式 对称加…

黑客技术(网络安全)自学

一、黑客是什么 原是指热心于计算机技术&#xff0c;水平高超的电脑专家&#xff0c;尤其是程序设计人员。但后来&#xff0c;黑客一词已被用于泛指那些专门利用电脑网络搞破坏或者恶作剧的家伙。 二、学习黑客技术的原因 其实&#xff0c;网络信息空间安全已经成为海陆空之…

Java事件监听机制

这里写目录标题 先进行专栏介绍再插一句 开始喽事件监听机制分析观察者模式观察者模式由以下几个角色组成&#xff1a;观察者模式的工作流程如下&#xff1a;观察者模式的优点包括&#xff1a;观察者模式适用于以下场景&#xff1a;总结 事件监听机制的工作流程如下&#xff1a…

智能卡通用安全检测指南 思度文库

范围 本标准规定了智能卡类产品进行安全性检测的一般性过程和方法。 本标准适用于智能卡安全性检测评估和认证。 规范性引用文件 下列文件对于本文件的应用是必不可少的。凡是注日期的引用文件&#xff0c;仅注日期的版本适用于本文件。凡是不注日期的引用文件&#xff0c;…

微信小程序如何引入Iconfont

在小程序中引入 Iconfont 可以通过以下步骤进行操作&#xff1a; 打开 Iconfont 网站&#xff08;https://www.iconfont.cn/&#xff09;并登录账号&#xff0c;创建一个项目并添加所需的图标到项目中。 在项目中选中需要使用的图标&#xff0c;点击右上角的 “下载代码” 按钮…

Spring集成Seata

Seata的集成方式有&#xff1a; 1. Seata-All 2. Seata-Spring-Boot-Starter 3. Spring-Cloud-Starter-Seata 本案例使用Seata-All演示&#xff1a; 第一步&#xff1a;下载Seata 第二步&#xff1a;为了更好看到效果&#xff0c;我们将Seata的数据存储改为db 将seata\sc…

剑指Offer 20.表示数值的字符串

20.表示数值的字符串 题目 官方地址 代码&#xff08;正则表达式&#xff09; public boolean isNumeric (String str) {if (str null || str.length() 0)return false;return new String(str).matches("[-]?\\d*(\\.\\d)?([eE][-]?\\d)?"); }在给定的代码…

聊聊混合动力汽车和纯电骑车的优势和劣势

混合动力汽车和纯电动骑车是两种不同的交通工具&#xff0c;它们都有各自的优势和劣势。本文将分别探讨混合动力汽车和纯电动骑车的优势和劣势&#xff0c;并为文章提供三个备选的好听的标题。 混合动力汽车是一种结合了内燃机和电动机的汽车&#xff0c;它可以同时利用燃油和电…

硬核!10分钟教你搭建一个本地版GPT4.0!

今天10分钟手把手教会你在自己电脑上搭建一个官方原版的GPT4.0。 不用ChatGPT账号&#xff0c;不用API&#xff0c;直接免费使用上官方原版的GPT4.0&#xff01; 对&#xff01;你没看错&#xff01;不仅是正版GPT4.0&#xff0c;还完全免费&#xff01; 而且整个部署流程极其…

微信开发之自动同意入群邀请的技术实现

简要描述&#xff1a; 自动通过群&#xff08;url&#xff09; 请求URL&#xff1a; http://域名地址/acceptUrl 请求方式&#xff1a; POST 请求头Headers&#xff1a; Content-Type&#xff1a;application/jsonAuthorization&#xff1a;Authorization值&#xff08;…

EdgeBox_tx1_A200 PyTorch v1.9.0 环境部署

大家好&#xff0c;我是虎哥&#xff0c;今天远程帮助几个小伙伴在A200 控制器上安装PyTorch v1.9.0 torchvision v0.10.0&#xff0c;中间也是经历了很多波折&#xff0c;当然&#xff0c;大部分是网络问题和版本适配问题&#xff0c;所以完事后&#xff0c;将自己完整可用的过…

38.利用matlab解 有约束无约束的参数估计对比(matlab程序)

1.简述 1.离散型随机变量的极大似然估计法: (1) 似然函数 若X为离散型, 似然函数为 (2) 求似然函数L(θ)的最大值点 θ, 则θ就是未知参数的极大似然估计值. 2.连续型随机变量的极大似然估计法: (1) 似然函数 若 X 为连续型, 似然函数为 (2) 求似然函数L(θ)的最大值点θ, 则…

webpack基础知识四:说说webpack中常见的Plugin?解决了什么问题?

一、是什么 Plugin&#xff08;Plug-in&#xff09;是一种计算机应用程序&#xff0c;它和主应用程序互相交互&#xff0c;以提供特定的功能 是一种遵循一定规范的应用程序接口编写出来的程序&#xff0c;只能运行在程序规定的系统下&#xff0c;因为其需要调用原纯净系统提供…

如果网站用了CDN,我怎么找到它的真实IP?

0x01 验证是否存在CDN 方法1&#xff1a; 很简单&#xff0c;使用各种多地 ping 的服务&#xff0c;查看对应 IP 地址是否唯一&#xff0c;如果不唯一多半是使用了CDN&#xff0c; 多地 Ping 网站有&#xff1a; http://ping.chinaz.com/ http://ping.aizhan.com/ http://ce.…

Darshan的安装与使用

下载Darshan源码 官网下载地址&#xff1a;https://www.mcs.anl.gov/research/projects/darshan/download/ 解压源码压缩包 #解压安装包 tar -xvzf darshan-<version-number>.tar.gz #生成配置文件 cd darshan-<version-number> ./prepareDarshan的源文件结构主…

Qt开发,编译报错:error: C2001: 常量中有换行符

一、问题描述 Qt开发&#xff0c;编译报错&#xff1a;error: C2001: 常量中有换行符 E:\work\xxx.cpp:1: warning: C4819: 该文件包含不能在当前代码页(936)中表示的字符。请将该文件保存为 Unicode 格式以防止数据丢失 E:\work\xxx.cpp:66: error: C2001: 常量中有换行符 E…

聊聊 Docker 和 Dockerfile

目录 一、前言 二、了解Dockerfile 三、Dockerfile 指令 四、多阶段构建 五、Dockerfile 高级用法 六、小结 一、前言 对于开发人员来说&#xff0c;会Docker而不知道Dockerfile等于不会Docker&#xff0c;上一篇文章带大家学习了Docker的基本使用方法&#xff1a;《一文…

无向图-已知根节点求高度

深搜板子题&#xff0c;无向图&#xff0c;加边加两个&#xff0c;dfs输入两个参数变量&#xff0c;一个是当前深搜节点&#xff0c;另一个是父节点&#xff08;避免重复搜索父节点&#xff09;&#xff0c;恢复现场 ///首先完成数组模拟邻接表#include<iostream> #incl…

uniapp微信小程序中打开腾讯地图获取用户位置信息

实现的效果 第一步&#xff1a;首先登录微信公众平台 , 需要用到AppID 第二步&#xff1a; 注册登录腾讯位置服务 注册需要手机号和邮箱确认&#xff0c;然后创建应用 创建后点击添加key 添加后会生成key&#xff0c;后面会用到这个key 第三步&#xff1a; 登录微信公众平台&a…

升级你的GitHub终端认证方式:从密码到令牌

升级你的GitHub终端认证方式&#xff1a;从密码到令牌 前言 GitHub官方在2021年8月14日进行了一次重大改变&#xff0c;它将终端推送代码时所需的身份认证方式从密码验证升级为使用个人访问令牌&#xff08;Personal Access Token&#xff09;。这个改变引起了一些新的挑战&am…