2026年华为软件开发工程师面试全攻略及题库.docxVIP

  • 0
  • 0
  • 约9.01千字
  • 约 27页
  • 2026-01-16 发布于福建
  • 举报

2026年华为软件开发工程师面试全攻略及题库.docx

第PAGE页共NUMPAGES页

2026年华为软件开发工程师面试全攻略及题库

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

题目1(20分):字符串处理

题目:给定一个字符串,要求找出其中最长的不重复字符子串的长度。例如,输入abcabcbb,返回3(对应子串abc)。

要求:

1.不能使用额外的数据结构(如哈希表)。

2.时间复杂度要求O(n)。

3.写出C++实现。

答案:

cpp

includeiostream

includestring

includealgorithm

intlengthOfLongestSubstring(conststd::strings){

if(s.empty())return0;

intmaxLen=0;

intstart=0;

intcharIndex[128];//ASCII字符集

std::fill(charIndex,charIndex+128,-1);

for(inti=0;is.length();++i){

charch=s[i];

if(charIndex[ch]=start){

start=charIndex[ch]+1;

}

charIndex[ch]=i;

maxLen=std::max(maxLen,i-start+1);

}

returnmaxLen;

}

intmain(){

std::stringinput=abcabcbb;

std::cout最长不重复子串长度:lengthOfLongestSubstring(input)std::endl;

return0;

}

解析:

1.使用固定大小的数组记录字符最后出现的位置,避免使用哈希表

2.维护一个滑动窗口的起始位置start

3.当发现重复字符时,更新start为重复字符的下一个位置

4.每次迭代计算当前窗口大小并与最大值比较

5.时间复杂度O(n),空间复杂度O(1)

题目2(20分):动态规划

题目:给定一个整数数组,判断是否存在三个元素a,b,c,使得a+b+c=0。找出所有不重复的三元组。要求时间复杂度低于O(n2)。

要求:

1.输出所有和为0的不重复三元组

2.可以排序后使用双指针优化

3.写出C++实现

答案:

cpp

includeiostream

includevector

includealgorithm

std::vectorstd::vectorintthreeSum(std::vectorintnums){

std::vectorstd::vectorintresult;

if(nums.size()3)returnresult;

std::sort(nums.begin(),nums.end());

for(inti=0;inums.size()-2;++i){

//跳过重复元素

if(i0nums[i]==nums[i-1])continue;

intleft=i+1;

intright=nums.size()-1;

inttarget=-nums[i];

while(leftright){

intsum=nums[left]+nums[right];

if(sum==target){

result.push_back({nums[i],nums[left],nums[right]});

//跳过重复元素

while(leftrightnums[left]==nums[left+1])left++;

while(leftrightnums[right]==nums[right-1])right--;

left++;

right--;

}elseif(sumtarget){

left++;

}else{

right--;

}

}

}

returnresult;

}

intmain(){

std::vectorintnums={-1,0,1,2,-1,-4};

std::vectorstd::vectorintresult=threeSum(nums);

for(constautotriplet:result){

std::cout(triplet[0],triplet[1],triplet[2]);

}

return0;

}

解析:

1.首先排序

文档评论(0)

1亿VIP精品文档

相关文档