2026年华为技术主管面试题及解析.docxVIP

  • 0
  • 0
  • 约6.9千字
  • 约 19页
  • 2026-01-30 发布于福建
  • 举报

第PAGE页共NUMPAGES页

2026年华为技术主管面试题及解析

一、编程题(3题,每题15分,共45分)

1.题目(15分):

编写一个函数,实现将一个字符串中的所有大写字母转换为小写字母,所有小写字母转换为大写字母,其余字符保持不变。要求不使用Python自带的`swapcase()`方法,仅使用基本操作。

答案:

python

defswap_case(s:str)-str:

result=[]

forcharins:

ifa=char=z:

result.append(char.upper())

elifA=char=Z:

result.append(char.lower())

else:

result.append(char)

return.join(result)

示例

print(swap_case(HelloWorld!))#输出:hELLOwORLD!

解析:

-遍历字符串中的每个字符,判断其ASCII码范围。

-大写字母(A~Z)转换为小写需加32(或减(A-a)),小写字母相反。

-非字母字符直接保留。

-时间复杂度O(n),空间复杂度O(n)。

2.题目(15分):

给定一个包含重复元素的列表,实现一个函数,返回所有不重复的三元组,其中三元组的和等于给定的目标值。要求三元组按升序排列,且不能有重复的三元组。

答案:

python

defthree_sum(nums:list,target:int)-list:

nums.sort()

result=[]

n=len(nums)

foriinrange(n):

ifi0andnums[i]==nums[i-1]:

continue

left,right=i+1,n-1

whileleftright:

total=nums[i]+nums[left]+nums[right]

iftotal==target:

result.append([nums[i],nums[left],nums[right]])

left+=1

right-=1

whileleftrightandnums[left]==nums[left-1]:

left+=1

whileleftrightandnums[right]==nums[right+1]:

right-=1

eliftotaltarget:

left+=1

else:

right-=1

returnresult

示例

print(three_sum([-1,0,1,2,-1,-4],0))#输出:[[-1,-1,2],[-1,0,1]]

解析:

-首先排序,便于跳过重复元素。

-固定第一个数,使用双指针(left,right)寻找另外两个数。

-若和等于目标值,记录并移动指针,同时跳过重复值。

-若和小于目标值,左指针右移;否则右指针左移。

-时间复杂度O(n2),空间复杂度O(1)。

3.题目(15分):

实现一个LRU(最近最少使用)缓存,支持`get`和`put`操作。缓存容量为固定值,当缓存满时,淘汰最久未使用的元素。要求不使用现成框架(如`OrderedDict`),仅用哈希表和双向链表实现。

答案:

python

classDLinkedNode:

def__init__(self,key=0,value=0):

self.key=key

self.value=value

self.prev=None

self.next=None

classLRUCache:

def__init__(self,capacity:int):

self.capacity=capacity

self.cache={}

self.head,self.tail=DLinkedNode(),DLinkedNode()

self.head.next=self.tail

self.tail.prev=self.head

def_add_node(self,node):

node.prev=self.head

node.next=self.head.next

self.head.next.prev=node

self.head.next=node

def_remove_node(self,node):

prev_node=node.prev

next_node=node.next

prev_node

文档评论(0)

1亿VIP精品文档

相关文档