- 0
- 0
- 约9.35千字
- 约 28页
- 2026-02-04 发布于福建
- 举报
第PAGE页共NUMPAGES页
2026年华为研发工程师岗位面试要点与答案
一、编程语言与数据结构(15题,共75分)
1.题目(5分):
请用C语言实现一个函数,输入一个正整数n,返回其二进制表示中1的个数。要求不使用内建函数。
答案:
c
intcountOne(intn){
intcount=0;
while(n){
count+=n1;
n=1;
}
returncount;
}
解析:位运算高效统计1的个数,通过右移和与操作逐位判断。
2.题目(10分):
给定一个无重复元素的数组nums和目标值target,返回所有相加等于target的不重复三元组。例如:nums=[-1,0,1,2],target=0→[[-1,0,1]]。
答案:
c
voidthreeSum(intnums,intnumsSize,inttarget,intres,intresSize){
qsort(nums,numsSize,sizeof(int),cmp);
resSize=0;
for(inti=0;inumsSize-2;++i){
if(i0nums[i]==nums[i-1])continue;
intl=i+1,r=numsSize-1;
while(lr){
intsum=nums[i]+nums[l]+nums[r];
if(sum==target){
res[resSize]=(int)malloc(3sizeof(int));
res[resSize][0]=nums[i];
res[resSize][1]=nums[l];
res[resSize][2]=nums[r];
(resSize)++;
while(lrnums[l]==nums[l+1])l++;
while(lrnums[r]==nums[r-1])r--;
l++;
r--;
}elseif(sumtarget)l++;
elser--;
}
}
}
解析:排序后双指针固定左三数,跳过重复值避免冗余组合。
3.题目(10分):
请解释红黑树的基本性质,并说明为什么它适合用作华为云数据库索引。
答案:
红黑树性质:
1.每个节点是红色或黑色。
2.根节点为黑色。
3.叶子节点(NIL)为黑色。
4.红色节点的两个子节点均为黑色(无相邻红色节点)。
5.从任一节点到其所有后代叶节点的简单路径上,黑节点数量相同。
适配索引原因:
-平衡性:插入/删除后通过旋转和重新着色维持O(logn)高度,适合海量数据。
-华为云场景:分布式数据库索引需低延迟和高并发处理,红黑树动态平衡特性优于AVL树(旋转次数更少)。
4.题目(5分):
请用Python实现快速排序的partition过程。
答案:
python
defpartition(arr,low,high):
pivot=arr[high]
i=low-1
forjinrange(low,high):
ifarr[j]=pivot:
i+=1
arr[i],arr[j]=arr[j],arr[i]
arr[i+1],arr[high]=arr[high],arr[i+1]
returni+1
解析:栈式递归实现,通过基准值划分数组,时间复杂度O(n)。
5.题目(10分):
请说明LRU(最近最少使用)缓存算法的原理,并设计其数据结构。
答案:
原理:双向链表+哈希表
-双向链表:头节点代表最近使用,尾节点代表最久未使用。
-哈希表:O(1)查找缓存项。
操作:
-访问时,节点移动到链表头部,哈希表更新。
-缓存满时,删除链表尾部节点,哈希表移除对应键。
c
typedefstructNode{
intkey,value;
structNodeprev,next;
}Node;
typedefstruct{
Nodehead,tail;
intcapacity;
intsize;
intkeys;
Nodehash;
}LRUCache;
voidmoveToHead(LRUCachecache,Nodenode){
if(node==cache-head)return;
if(node==cache-tail)cache-tail=node-prev;
if(node-prev)
原创力文档

文档评论(0)