- 0
- 0
- 约5.14千字
- 约 14页
- 2026-03-16 发布于福建
- 举报
第PAGE页共NUMPAGES页
2026年华为公司软件开发工程师面试题及答案
一、编程题(共3题,每题20分,总计60分)
题目1(Java编程题,20分):
编写一个Java方法,实现将任意长度的正整数数组转化为一个字符串,其中相邻数字之间用英文逗号分隔。例如,输入`[123,456,789]`,输出`123,456,789`。要求:
1.方法名必须为`formatArrayToString`;
2.处理空数组时返回空字符串``;
3.忽略数组中的负数或非整数元素(直接跳过不处理);
4.时间复杂度要求O(n)。
答案与解析:
java
publicStringformatArrayToString(int[]array){
if(array==null||array.length==0){
return;
}
StringBuildersb=newStringBuilder();
booleanisFirst=true;
for(intnum:array){
if(num0||!Integer.isInteger(num)){
continue;//忽略负数或非整数
}
if(!isFirst){
sb.append(,);
}else{
isFirst=false;
}
sb.append(num);
}
returnsb.toString();
}
解析:
1.判断数组是否为空或长度为0,直接返回空字符串;
2.使用`StringBuilder`提高字符串拼接效率;
3.通过`isFirst`标志位控制逗号的使用,避免首部多逗号;
4.跳过负数或非整数元素;
5.时间复杂度为O(n),其中n为数组长度。
题目2(C++编程题,20分):
实现一个C++函数,给定一个无重复元素的整数数组,返回其所有可能的子集(幂集)。例如,输入`[1,2,3]`,输出`[[],[1],[2],[3],[1,2],[1,3],[2,3],[1,2,3]]`。要求:
1.不能使用递归或回溯算法;
2.时间复杂度要求O(2^n)。
答案与解析:
cpp
includevector
usingnamespacestd;
vectorvectorintsubsets(vectorintnums){
vectorvectorintresult;
intn=nums.size();
intsubsetCount=1n;//2^n
for(intmask=0;masksubsetCount;++mask){
vectorintsubset;
for(inti=0;in;++i){
if(mask(1i)){//检查第i位是否为1
subset.push_back(nums[i]);
}
}
result.push_back(subset);
}
returnresult;
}
解析:
1.利用位运算生成所有可能的子集,每个子集对应一个`mask`(二进制数);
2.`1n`得到2^n,表示所有子集的数量;
3.对每个`mask`,检查其二进制位是否为1,若为1则将对应元素加入子集;
4.时间复杂度为O(2^n),空间复杂度为O(n·2^n)。
题目3(Python编程题,20分):
编写一个Python函数,实现快速幂算法,计算`a^n`(a为底数,n为非负整数)。要求:
1.不能使用内置的`pow(a,n)`或``运算符;
2.支持大整数计算(如`a=2,n=1000`)。
答案与解析:
python
defquick_pow(a,n):
result=1
base=a
whilen0:
ifn%2==1:
result=base
base=base
n//=2
returnresult
解析:
1.快速幂算法通过将指数`n`分解为二进制形式,每次将底数平方并右移一位;
2.若当前位为1,则将当前底数乘到结果中;
3.时间复杂度为O(logn),适合大整数计算。
二、算法题(共2题,每题25分,总计50分)
题目4(数据结构题,25分):
设计一个LRU(最近最少使用)缓存,支持以下操作:
1.`LRUCache(intcapacity)`:初始化缓存容量为`capacity`;
2.`get(intkey)`:返回键`key`对应的值,若不存在返回`-1`;
3.`
原创力文档

文档评论(0)