2023.5.31 小马智行 c++ 一面

本文记述了一次小马智行的C++面试经历,面试中涉及了gn工具的原理解释,如何处理完全二叉树节点删除问题的算法,以及在二叉搜索树中寻找特定和的解法。面试流程45分钟,整体体验顺畅。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

小马智行,c++一面小记

导语

  流程大概45分钟。除了基本的问题,除了自我介绍之外,根据我的一个项目问了个问题,然后手撕了两个题。整体来说体验还不错,比较顺畅。

面试内容

   这里只记录重点内容。
   Q1:项目中提到了使用gn来构建跨平台的工程,那么它的原理是什么呢?
   A1:这个可以先从本地IDE做了什么谈起。本地IDE其实是帮助你用图形化的方式去组织了文件的依赖以及包含关系,然后不同的平台,不同的编译器中去执行了不同的指令来完成后续的一个编译,链接的过程。比如在visual studio中它是通过nmake工具完成,比如linux的GNU的make工具完成。
   而这些gn脚本,包括cmake,make等工具,它的本质也是在脚本中去编写文件的依赖关系,然后由它们负责在不同的平台去选择对应的编译工具,去生成对应的工程或者直接使用相应的编译器来帮助你进行构建。 这样就能够达到一个只写编译脚本,不关注运行平台但是运行相应的脚本就能够跨平台地进行构建的功能。

   Q2: 给一个完全二叉树,然后随机删除一个节点,返回删除的这个节点的序号。

int findFirstDeleteNode(TreeNode* root){
  if(root == nullptr){
    return 0;
  }
  
  std::queue<TreeNode*> q;
  q.push(root);
  int curIndex = 0;
  while(!q.empty()){
    TreeNode* currentNode = q.front();
    q.pop();
    if(currentNode == nullptr){
      return curIndex;
    }
    curIndex++;
    
    q.push(currentNode->left);
    q.push(currentNode->right);
  }
  return -1;
}

   Q3: 给两颗二叉搜索树,然后给一个整数,判断是否能在两个树中找到两个节点的和为该整数。

bool findIfPariedWithTarget(TreeNode* root1, TreeNode* root2, int target){
	std::unordered_set<int> set1,set2;
  dfs(root1,set1);
  dfs(root2,set2);
  
  for(int val:set1){
    if(set2.count(target - val)){
      return true;
    }
  }
  
  return false;
}

void dfs(TreeNode* root, std::unordered_set<int>& s){
	if(!root) return;
  s.insert(root->val);
  dfs(root->left,s);
  dfs(root->right,s);
} 
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值