- 1
- 0
- 约8.07千字
- 约 23页
- 2026-02-26 发布于福建
- 举报
第PAGE页共NUMPAGES页
2026年华为技术部门面试题集及答案解析
一、编程语言与数据结构(共5题,每题8分)
1.题目:
请用C++实现一个函数,输入一个整数数组,返回数组中所有子数组的和的最大值。例如,输入`{-2,1,-3,4,-1,2,1,-5,4}`,输出`6`(子数组`[4,-1,2,1]`)。
答案:
cpp
includevector
includealgorithm
usingnamespacestd;
intmaxSubArraySum(constvectorintnums){
if(nums.empty())return0;
intmaxSum=nums[0];
intcurrentSum=nums[0];
for(size_ti=1;inums.size();++i){
currentSum=max(nums[i],currentSum+nums[i]);
maxSum=max(maxSum,currentSum);
}
returnmaxSum;
}
解析:
采用动态规划思路,`currentSum`记录以当前元素结尾的最大子数组和,`maxSum`记录全局最大值。时间复杂度O(n),空间复杂度O(1)。
2.题目:
用Java实现二叉树的深度优先遍历(前序、中序、后序),并说明各自的特点。
答案:
java
classTreeNode{
intval;
TreeNodeleft;
TreeNoderight;
TreeNode(intx){val=x;}
}
publicclassBinaryTreeDFS{
//前序遍历(根-左-右)
voidpreOrder(TreeNoderoot){
if(root==null)return;
System.out.print(root.val+);
preOrder(root.left);
preOrder(root.right);
}
//中序遍历(左-根-右)
voidinOrder(TreeNoderoot){
if(root==null)return;
inOrder(root.left);
System.out.print(root.val+);
inOrder(root.right);
}
//后序遍历(左-右-根)
voidpostOrder(TreeNoderoot){
if(root==null)return;
postOrder(root.left);
postOrder(root.right);
System.out.print(root.val+);
}
}
解析:
-前序:用于构建表达式树,先处理根节点。
-中序:二叉搜索树的中序遍历结果有序。
-后序:用于删除树,先处理子节点。
3.题目:
设计一个LRU(最近最少使用)缓存,支持`get`和`put`操作,容量为3。例如:
-`put(1,1)`→缓存={1:1}
-`put(2,2)`→缓存={1:1,2:2}
-`get(1)`→返回1,缓存={2:2,1:1}
-`put(3,3)`→缓存={1:1,2:2,3:3}
-`put(4,4)`→弹出1,缓存={2:2,3:3,4:4}
答案:
java
importjava.util.HashMap;
importjava.util.Map;
classLRUCache{
privateMapInteger,Integercache;
privateintcapacity;
publicLRUCache(intcapacity){
this.capacity=capacity;
cache=newHashMap();
}
publicintget(intkey){
if(!cache.containsKey(key))return-1;
intvalue=cache.get(key);
cache.remove(key);
cache.put(key,value);//更新访问顺序
returnvalue;
}
publicvoidput(intkey,intvalue){
if(cache.containsKey(key)){
cache.remove(key);
}elseif(cache.size()==capacity){
cache.remove(cache.k
原创力文档

文档评论(0)