2026年华为软件开发工程师面试指南及答案.docxVIP

  • 0
  • 0
  • 约8.25千字
  • 约 25页
  • 2026-01-20 发布于福建
  • 举报

2026年华为软件开发工程师面试指南及答案.docx

第PAGE页共NUMPAGES页

2026年华为软件开发工程师面试指南及答案

一、编程基础(5题,每题10分,共50分)

1.题目:

请编写一个函数,实现快速排序算法,并对以下数组进行排序:`[34,7,23,32,5,62]`。

答案:

cpp

includeiostream

includevector

usingnamespacestd;

voidquickSort(vectorintarr,intleft,intright){

if(left=right)return;

intpivot=arr[left];

inti=left,j=right;

while(ij){

while(ijarr[j]=pivot)j--;

if(ij)arr[i++]=arr[j];

while(ijarr[i]=pivot)i++;

if(ij)arr[j--]=arr[i];

}

arr[i]=pivot;

quickSort(arr,left,i-1);

quickSort(arr,i+1,right);

}

intmain(){

vectorintarr={34,7,23,32,5,62};

quickSort(arr,0,arr.size()-1);

for(intnum:arr)coutnum;

return0;

}

解析:

快速排序的核心是选择基准值(pivot),将数组分为左右两部分,使左边的值均小于基准值,右边的值均大于基准值,然后递归对左右子数组进行排序。时间复杂度为O(nlogn),空间复杂度为O(logn)。

2.题目:

请实现一个函数,判断一个字符串是否为回文字符串(例如:abba是回文,abc不是)。

答案:

cpp

includeiostream

includestring

usingnamespacestd;

boolisPalindrome(conststrings){

intleft=0,right=s.size()-1;

while(leftright){

if(s[left]!=s[right])returnfalse;

left++;

right--;

}

returntrue;

}

intmain(){

strings1=abba;

strings2=abc;

coutboolalphaisPalindrome(s1)endl;//输出:true

coutboolalphaisPalindrome(s2)endl;//输出:false

return0;

}

解析:

双指针法,从字符串两端向中间遍历,比较对应字符是否相同。若全部相同,则为回文;否则不是。

3.题目:

请编写一个函数,找出数组中重复次数最多的元素及其出现次数。例如:`[1,3,2,1,4,1]`,输出为`(1,3)`。

答案:

cpp

includeiostream

includeunordered_map

usingnamespacestd;

pairint,intfindMaxFrequency(constvectorintarr){

unordered_mapint,intfreq;

for(intnum:arr)freq[num]++;

intmaxFreq=0,maxNum=0;

for(constauto[num,count]:freq){

if(countmaxFreq){

maxFreq=count;

maxNum=num;

}

}

return{maxNum,maxFreq};

}

intmain(){

vectorintarr={1,3,2,1,4,1};

auto[num,freq]=findMaxFrequency(arr);

cout(num,freq)endl;//输出:(1,3)

return0;

}

解析:

使用哈希表统计每个元素的出现次数,然后遍历哈希表找出出现次数最多的元素。

4.题目:

请实现一个函数,计算两个正整数的最大公约数(GCD),要求不使用内置函数。

答案:

cpp

includeiostream

usingnamespacestd;

intgcd(inta,intb){

while(b!=0){

int

文档评论(0)

1亿VIP精品文档

相关文档