这是一篇灌水的博客。
今天收到了华为2012实验室的面试通知,HR老师说手撕代码很重要,遂在LeetCode上进行了一次华为题库的模拟面试,下面是这次模拟面试的三道题目。
华为的面试一般要求在记事本中写代码,有时也会要求在纸上写代码,所以建议大家在练习的时候尽量还是不要在本地IDE写代码。像这种模拟面试尽量还是直接在LeetCode的网页上编写程序。

面试结果:全部通过
总时长:1 小时 30 分
耗时:46 分 19 秒
答题数:3/3

一、二叉搜索树转化为累加和

给出二叉 搜索 树的根节点,该树的节点值各不相同,请你将其转换为累加树(Greater Sum Tree),使每个节点 node 的新值等于原树中大于或等于 node.val 的值之和。

提醒一下,二叉搜索树满足下列约束条件:

  • 节点的左子树仅包含键 小于 节点键的节点。
  • 节点的右子树仅包含键 大于 节点键的节点。
  • 左右子树也必须是二叉搜索树。

**注意:**本题和 1038: https://leetcode-cn.com/problems/binary-search-tree-to-greater-sum-tree/ 相同

示例 1:

输入:[4,1,6,0,2,5,7,null,null,null,3,null,null,null,8]
输出:[30,36,21,36,35,26,15,null,null,null,33,null,null,null,8]

示例 2:

输入:root = [0,null,1]
输出:[1,null,1]

示例 3:

输入:root = [1,0,2]
输出:[3,3,2]

示例 4:

输入:root = [3,2,4,1]
输出:[7,9,4,10]

提示:

  • 树中的节点数介于 0104 之间。
  • 每个节点的值介于 -104104 之间。
  • 树中的所有值 互不相同
  • 给定的树为二叉搜索树。

我的解法

树中的节点根据值从大到小的顺序依次改变就可以了。二叉树的三个遍历中,中序遍历是按照排序顺序的,不过这里需要先遍历右孩子,最后遍历左孩子。整个过程需要遍历所有的节点一次,所以时间复杂度为O(n)O(n)O(n)。具体的代码如下所示

/*** Definition for a binary tree node.* public class TreeNode {*     int val;*     TreeNode left;*     TreeNode right;*     TreeNode() {}*     TreeNode(int val) { this.val = val; }*     TreeNode(int val, TreeNode left, TreeNode right) {*         this.val = val;*         this.left = left;*         this.right = right;*     }* }*/
class Solution {public TreeNode convertBST(TreeNode root) {if(root==null){return root;}convertBST(root, 0);return root;}private int convertBST(TreeNode root, int base){if(root.right==null){root.val = root.val + base;base = root.val;}else{base = convertBST(root.right, base);root.val = root.val + base;base = root.val;}if(root.left!=null){base = convertBST(root.left, base);}return base;}
}

二、 最大的以1为边界的正方形

给你一个由若干 01 组成的二维网格 grid,请你找出边界全部由 1 组成的最大 正方形 子网格,并返回该子网格中的元素数量。如果不存在,则返回 0

示例 1:

输入:grid = [[1,1,1],[1,0,1],[1,1,1]]
输出:9

示例 2:

输入:grid = [[1,1,0,0]]
输出:1

提示:

  • 1 <= grid.length <= 100
  • 1 <= grid[0].length <= 100
  • grid[i][j]01

我的解法

这道题没有想到太好的解法,写了个大遍历,只是在遍历的时候先判断目标正方向的最左上和最右下位置的元素,并且只考察比当前最大正方形更大的正方形,来起到一个剪枝的作用。这个算法的时间复杂度的分析比较复杂。下面是具体的Java程序实现

class Solution {public int largest1BorderedSquare(int[][] grid) {int n = grid.length;int m = grid[0].length;if(n==0 || m==0){return 0;}int max = -1;for(int i=0; i<n; i++){for(int j=0; j<m; j++){if(grid[i][j]==1){max = 0;break;}}}if(max==-1){return 0;}for(int i=0; i+max<n; i++){for(int j=0; j+max<m; j++){int b = Math.min(n-i, m-j)-1;for(int max1=max; max1<=b; max1++){if(grid[i][j]==1 && grid[i+max1][j+max1]==1){boolean flag = true;for(int k=0; k<=max1; k++){if(grid[i][j+k]==0 || grid[i+max1][j+k]==0 || grid[i+k][j]==0 || grid[i+k][j+max1]==0){flag = false;break;}}if(flag){max = max1;}}}}}return (max+1)*(max+1);}
}

三、串联所有单词的子串

给定一个字符串 s 和一些长度相同的单词 **words。**找出 s 中恰好可以由 words 中所有单词串联形成的子串的起始位置。

注意子串要与 words 中的单词完全匹配,中间不能有其他字符,但不需要考虑 words 中单词串联的顺序。

示例 1:

输入:s = "barfoothefoobarman",words = ["foo","bar"]
输出:[0,9]
解释:
从索引 0 和 9 开始的子串分别是 "barfoo" 和 "foobar" 。
输出的顺序不重要, [9,0] 也是有效答案。

示例 2:

输入:s = "wordgoodgoodgoodbestword",words = ["word","good","best","word"]
输出:[]

我的解法

看到这道题的时候,一度想放弃,因为没有想到什么巧妙的解法。最后也是用了一个大暴力的方法,最后提交到LeetCode系统结果显示运行时间1500多毫秒。下面是具体的Java程序实现

class Solution {public List<Integer> findSubstring(String s, String[] words) {List<Integer> res = new LinkedList<>();int n = s.length();int k = words.length;if(n==0 || k==0 || n<k){return res;}int m = words[0].length();if(m==0){return res;}for(int i=0; i+k*m<=n; i++){int[] visited = new int[k];int ptr = i;while(ptr<n){boolean flag = false;for(int j=0; j<k; j++){if(visited[j]==0 && words[j].equals(s.substring(ptr, ptr+m))){visited[j] = 1;ptr += m;flag = true;break;}}if(!flag){break;}}if(ptr==i+k*m){res.add(i);}}return res;}
}

LeetCode华为模拟面试相关推荐

  1. 有三AI模拟面试服务上线,一对一服务助你求职

    文/编辑 | 言有三 各位粉丝朋友们,今天正式上线有三AI模拟面试服务,在这里会给大家提供有偿的模拟面试,针对简历写作,项目技能,求职方向等做相关辅导. 模拟面试服务内容 要找到一份好工作可以是一个非 ...

  2. 华为公司面试新员工的有关计算机网络的题目和答案

    一.华为公司面试新员工的有关计算机网络的题目和答案 RFC1918文件规定了保留作为局域网使用的私有地址:            10.0.0.0                 -       10 ...

  3. 华为芯片设计面试题_华为公司面试硬件工程师笔试题

    华为公司面试硬件工程师笔试题 华为是我国知名的大企业,那么它在招聘硬件工程师的时候有什么要求呢?以下是百分网小编精心为大家整理的华为公司面试硬件工程师笔试题,希望对大家有所帮助!更多内容请关注应届毕业 ...

  4. 西安华为OD面试体验

    西安华为OD面试体验 开始投简历 技术面试 进展 工作 进展 开始投简历 去年一整年一直在考研和工作之间纠结,感觉自己的状态好像当时的疫情一样差劲.之前刚毕业的时候投了个大厂的简历,结果一面写算法的时 ...

  5. 2023华为OD面试手撕代码经验分享

    我们先来看下这个同学的面试经历吧,非常有借鉴的意义. [22届考研渣渣的od求职之旅,推荐一下两个人,德科hr和牛客的老哥] "*********",hr给了机会吧,一开始我都没想 ...

  6. 西安华为OD面试经验(德科)

    背景: 本科某双非邮电软件专业,二战冲985失败,随便写的简历挂boss上,hr电话联系帮我约的机考(华为od网络风评很差,这一点还是hr告诉我这个初入社会的学生党的,态度挺诚恳,我也只是本着随便试试 ...

  7. 【模拟面试-10年工作】项目多一定是优势吗?

    大家好,温大大好久没跟大家见面了,最近温大大在参与一个开源项目,所以比较忙,一直没出视频,等这个开源项目稳定上线后,我准备给大家分享下开源项目的玩法. 好了我们来说说正事,上周3一个读者找到我说想让我 ...

  8. 模拟面试训练营:顶尖科技公司的offer等着你

    全文共1962字,预计学习时长7分钟 图源:unsplash 作为自学起家的人,笔者总是觉得准备技术性面试是一项让人抓不住重点的任务.为了解决这个问题,笔者与志同道合的小伙伴合作成立了cscareer ...

  9. HCIE华为云计算面试-虚拟化

    HCIE华为云计算面试-虚拟化 名词解释 内存复用 链接克隆 DRS DPM EIP 快照 镜像服务 FusionCompute虚拟机热迁移的定义?迁移要求?应用场景?迁移过程. FusionComp ...

最新文章

  1. matlab ia模块,MathWorks发布MATLAB和SimulinkR2020a版本,为工程师和科学家提供更多AI功能...
  2. 【图解】《“十四五”机器人产业发展规划》
  3. maven获得dom4j_在maven下的使用Dom4j解析XML....
  4. mysql的基准测试_mysql基准测试 -benchmarks
  5. boost:验证BOOST_CONCEPT_ASSERT捕获了错误
  6. 护理方面关于人工智能的构想_如何提出惊人的AI,ML或数据科学项目构想。
  7. c语言中O空字符,OC语言中字符串的使用
  8. Linux CentOS如何汉化系统
  9. 联想打印机 linux驱动怎么安装步骤,如何在MAC系统下安装打印机驱动
  10. .NET开发人员应该下载的十个必备工具(1)
  11. html里关于表单的一些操作代码
  12. 使用ENVI进行监督分类
  13. 基于python管理系统论文_基于Python的运动计费管理系统
  14. 使用html2canvas生成海报,阿里云oss图片或网络图片报跨域问题
  15. 北卡罗来纳州立大学计算机科学,北卡罗来纳州立大学计算机科学理学硕士研究生申请要求及申请材料要求清单...
  16. 阿里云ECS和WorldPress + Nginx实现固定连接策略
  17. sizeof 知多少
  18. 如何在WordPress菜单中显示图标[WordPress插件]
  19. refseq数据库的特点_eureka如何剔除服务
  20. 意迷观看欧冠决赛慌乱踩踏 公共安防再次升级

热门文章

  1. 社区拼团小程序开发运营,社区拼团电商小程序系统开发解决方案
  2. 笔记本温度过高自动关机了
  3. 借道元宇宙 一汽-大众揽巡打造沉浸式上市体验
  4. 关于自然常数e的理解
  5. YAPF —— Python代码格式化工具
  6. OpenCV-矩阵归一化cv::normalize
  7. iphone手机热点卡顿多次断连解决办法
  8. 数据分析中的Excel、R、Python、SPSS、SAS和SQL
  9. java爬虫框架代理ip的配置与调试
  10. python的注释 多行注释 注意点