华为笔试 3.27 500分

3月13日投递了华为简历,通用软件开发

3月27日进行了华为的笔试,我第一题过了100%,第二题过了82%,第三题过了85% , 总共耗时约 70 分钟

一道简单,两道中等吧

今天室友来问我笔试,我就在这里写一写思路,具体代码实现可能过两天在完善了,可能写的很简陋,甚至有错

第一题:具体题目记不得了,大概就是排序,大家应该都会做,我就不讲了

第二题:是一个二叉平衡树的问题,给定一个升序数组,构建为二叉平衡树,找到符合条件的叶子节点,并求符合条件的值的和

思路:

  1. 首先肯定不是让你构建一颗二叉平衡树,时间肯定不够
  2. 你要知道二叉平衡树的大概概念,以及构建流程,这里就不讲了
  3. 核心:查找叶子节点可以用二分查找递归的方法(暂时见代码,如果不理解,之后更新详细版本,今天太晚了)
  4. 找出叶子节点了,那就简单了,后面自己写吧
function search(low,high){
  if(low===high){return }
  else{
  	let mid=Math.floor(low+high)/2
	visited[mid]=1
	search(low,mid-1)
	search(mid+1,high)
  }
}
//最后visited数组中为0的元素就是叶子节点

这题我只过了82%的样例,可能哪里出错了,但是我有找到,有无大佬帮忙看看我的思路哪里有问题

具体实现:

function search(visited,low,high){
  if(low===high){
    visited[low]=1
  }
  else if(low<high){
    let mid=Math.floor((low+high)/2)
    search(visited,low,mid-1)
    search(visited,mid+1,high)
  }
}
//输入为一个一维数组
function answer(nums,min,max){
  nums.sort((a,b)=>a-b)
  const visited=new Array(nums.length).fill(0)
  const yezi=[]
  search(visited,0,nums.length-1)
  for(let i=0;i<nums.length;i++){
    if(visited[i]===1){
      yezi.push(nums[i])
    }
  }
  let sum=0,tag=0
  for(let key of yezi){
    if(key>=min&&key<=max){
      sum+=key
      tag=1
    }
  }
  console.log(yezi)
  if(tag){
    return sum
  }
  else{
    if(yezi.length===0){
      return 0
    }
    else{
      return yezi.pop()
    }
  }
}

console.log(answer([7,17,35,56,65,66],56,65))

第三题:拓扑排序,给定一个数字n,表示n个节点,在给定一个二维数组,如[ [ 1 , 0 ] , [ 1 , 2 ] ]表示要完成任务1,先完成任务0,要完成任务1,先完成任务2,输出执行顺序

思路:暴力解法

  1. 先遍历二维数组,更新一个前缀任务数组,表示完成该任务,需要先完成的任务的数量
  2. 还是循环,查找前缀任务数量为0的任务,并添加到结果队列中,并把相应前缀任务为该任务的任务的前缀任务数量-1(这句话可能有点绕)
  3. 就这样循环,直到所有任务都在结果队列里,或者这一次循环没有添加任何任务到结果队列中就结束

具体实现:

//输入n,表示n个任务,然后输入一个二维数组,二维数组中的每一个表示一个任务的前置任务,如[ 1 , 0 ],表示完成任务1需要任务0先完成。
function topologicalSort(n,pretask) {
  const pre=new Array(n).fill(0)
  for(let key of pretask){
    pre[key[0]]++
  }

  const res=[]
  let tag=1
  while(tag && res.length<n){
    tag=0
    for(let i=0;i<n;i++){
      if(pre[i]===0){
        res.push(i)
        pre[i]=-1
        tag=1
        for(let key of pretask){
          if(key[1]===i){
            pre[key[0]]--
          }
        }
      }
    }
  }
  if(res.length!==n){
    return []
  }
  return res
}
console.log(topologicalSort(6,[[1,0],[2,0],[3,1],[3,2],[3,4],[5,4],[5,2]]))

这题我过了85%的样例,最后好像是超时了,还是答案错误,记不得了,优化办法的我觉得可能可以加上排序吧,或者直接换个别的方法,等我明天试一试。

大概先这样吧,讲的很简陋

华为hr什么时候约我面试呀


到现在也没约我面试,估计是没有岗位了,24届春招大家都散了吧,下面是25届实习生的时代了

#华为笔试#
全部评论
华为不是4月份才开始笔试吗
4 回复 分享
发布于 2024-04-03 09:46 广东
老哥实习还是春招啊
3 回复 分享
发布于 2024-04-03 10:16 四川
第3题个人想法,(Java):用图表示各个任务之间的关系,图最终会是directed graph(如: a -> b 代表完成a才能完成b,这里b是a的邻居而a不是b的邻居(也不可能是,否则将死循环))(这里我会不停的使用node和任务这两个名词,它们代表一样的东西) 1)创造一个数组叫作neighbours, neighbours[i] 是一个LinkedList<integer> 代表i的所有neighbour nodes. 2)创造一个数组叫做result, 用于记录最终任务顺序。在这里,添加任务时从数组的最后端开始添加,也就是说先添加最后完成的任务(原因在第4步) 3)创建一个数组visited, visited[i] = true 代表任务i/node i已经被加入result中 4) for i = 0,1,2,...,n, 对于node i 我们执行dfs(i) (如果visited[i] = true, 直接skip). 但这里需要对dfs稍做改变。改变为: 对于所有node i,只有当对其所有邻居都执行完dfs并回溯到自己本身(node i)时,才能把任务i添加到result中(记得是由后往前添加)并且set visited[i] = true。因为这样的话,对于所有node来说,当我们回溯到某个node时说明此node能解锁的任务都已添加到result了,这时我们可以在不影响正确性的情况下将此node添加到result中。 5)return result; 设n = 任务数量 设v = input 数组的数量 (也就是在以上算法中的number of directed edges) 时间复杂度:O(v + n) = O(v) (因为v >= n) </integer>
1 回复 分享
发布于 2024-04-04 03:23 新加坡
第三题社招时的简单题,100分值,考察有向邻接矩阵
点赞 回复 分享
发布于 2024-05-13 07:32 浙江
今天还叫我机考
点赞 回复 分享
发布于 2024-04-10 18:10 广东
华为春招早就没岗位了吧 我三月初投的hr电话告诉进面试 后面过俩周还没面就直接通知没hc了
点赞 回复 分享
发布于 2024-04-10 13:52 北京
楼主投的那个部门啊?
点赞 回复 分享
发布于 2024-04-08 11:29 湖南
华为是直签还是OD啊?
点赞 回复 分享
发布于 2024-04-04 07:26 意大利
😘😘
点赞 回复 分享
发布于 2024-04-03 08:48 四川

相关推荐

05-12 10:10
已编辑
门头沟学院 人工智能
写这篇之前我犹豫了挺久。一方面是怕被人骂,&quot;又一个收割焦虑的转行帖&quot;;另一方面是看了太多用&nbsp;GPT&nbsp;套娃出来的「学习路线」文章,AI&nbsp;味重得让人没法读完。所以这篇全是亲身踩过的坑,时间线、用过的项目、当时的心路全都尽量原样写出来。如果你是大学生在迷茫要不要转&nbsp;AI,或者已经在转的路上,希望能给点参考。&nbsp;一个反共识的开场:你以为进&nbsp;OpenAI&nbsp;的人都是博士?&nbsp;先讲个故事,跟我没关系,但跟所有想转&nbsp;AI&nbsp;的人都有关系。&nbsp;OpenAI&nbsp;的&nbsp;Sora&nbsp;团队(就是搞文生视频那个)一共&nbsp;13&nbsp;个人。这里面有两个人特别有意思:&nbsp;Will&nbsp;DePue,密歇根大学计算机系,直接辍学了。17...
_hengheng:我也本,也算是做ai相关,我最开始感觉做ai工程师有多么多么困难,后来发现懂了原理后整体训练完全可以看成一个流程化的内容,开源方案太多了,大多基本都是按着模子在自家业务上做各种操作,就算是大厂的小部门也没那么多资源去训基模,反而更多的是像怎么把技术往业务方向靠近了,不过当前时代如果本科学历没那么好加上自己执行力不是特别强还真不建议走ai工程师这条路,可以试试其他ai的偏业务方向,不然校招不太好杀出来
点赞 评论 收藏
分享
03-29 17:05
门头沟学院 Java
asdasdasda...:我前段时间找工作焦虑,有几天连续熬夜熬穿了,然后心脏突然不舒服,立马躺床上睡觉了,然后第二天还是不舒服,去看医生说是心率不齐,吓得我后面天天早早睡觉,调养身体,过了好几天才好过来。所以真的,工作这些东西哪有那么重要,最多钱多一点钱少一点,降低物欲。活着才是最重要的,现在想想真的后怕
如何排解工作中的焦虑
点赞 评论 收藏
分享
评论
24
66
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务