2026年华为公司软件开发工程师面试题及答案.docxVIP

  • 0
  • 0
  • 约5.14千字
  • 约 14页
  • 2026-03-16 发布于福建
  • 举报

2026年华为公司软件开发工程师面试题及答案.docx

第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)

1亿VIP精品文档

相关文档