2026年华为技术部面试技巧与问题集.docxVIP

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

第PAGE页共NUMPAGES页

2026年华为技术部面试技巧与问题集

一、编程能力测试(共5题,每题20分,总分100分)

1.题目:请实现一个函数,输入一个整数数组,输出该数组中的最长连续递增子序列的长度。例如,输入[1,3,5,4,7],输出3(最长递增子序列为[1,3,5]或[1,3,4])。

答案:

cpp

intlongestIncreasingSubsequence(vectorintnums){

if(nums.empty())return0;

vectorintdp(nums.size(),1);

intmaxLen=1;

for(inti=1;inums.size();++i){

for(intj=0;ji;++j){

if(nums[i]nums[j]){

dp[i]=max(dp[i],dp[j]+1);

}

}

maxLen=max(maxLen,dp[i]);

}

returnmaxLen;

}

解析:使用动态规划方法,dp[i]表示以nums[i]结尾的最长递增子序列长度。遍历数组,对于每个元素,向前遍历所有比它小的元素,更新dp[i]。最终maxLen即为最长递增子序列的长度。

2.题目:请实现快速排序算法,并分析其时间复杂度。

答案:

cpp

voidquickSort(vectorintnums,intleft,intright){

if(left=right)return;

intpivot=nums[left+(right-left)/2];

inti=left,j=right;

while(i=j){

while(nums[i]pivot)i++;

while(nums[j]pivot)j--;

if(i=j){

swap(nums[i],nums[j]);

i++;

j--;

}

}

quickSort(nums,left,j);

quickSort(nums,i,right);

}

解析:快速排序的平均时间复杂度为O(nlogn),最坏情况为O(n^2)。通过选择枢轴(pivot)并分区,将数组分为两部分,分别递归排序。

3.题目:请实现一个函数,输入一个字符串,判断该字符串是否是有效的括号组合(例如()、()[]{}有效,([)]无效)。

答案:

cpp

boolisValid(strings){

stackcharst;

unordered_mapchar,charmapping={{),(},{],[},{},{}};

for(charc:s){

if(mapping.count(c)){

if(st.empty()||st.top()!=mapping[c])returnfalse;

st.pop();

}else{

st.push(c);

}

}

returnst.empty();

}

解析:使用栈结构,遍历字符串,对于每个字符,如果是闭括号,检查栈顶是否为对应的开括号,是则弹出;否则压入栈中。最后栈为空则有效。

4.题目:请实现一个函数,输入一个字符串,返回所有可能的字母组合(例如输入23,输出[ad,ae,af,bd,be,bf,cd,ce,cf])。

答案:

cpp

vectorstringletterCombinations(stringdigits){

if(digits.empty())return{};

vectorstringmapping={0,1,abc,def,ghi,jkl,mno,pqrs,tuv,wxyz};

vectorstringresult;

stringpath;

dfs(digits,0,path,mapping,result);

returnresult;

}

voiddfs(stringdigits,intindex,stringpath,vectorstringmapping,vectorstringresult){

if(index==digits.size()){

result.push_back(path);

return;

}

intnum=digits[index]-0;

stringletters=mapping[num];

for(charc:letters){

path.push_back(c);

dfs(digits,index+1,path,

文档评论(0)

1亿VIP精品文档

相关文档