计算机科学核心面试题及答案.docxVIP

  • 0
  • 0
  • 约6.61千字
  • 约 18页
  • 2026-01-29 发布于福建
  • 举报

第PAGE页共NUMPAGES页

2026年计算机科学核心面试题及答案

一、算法与数据结构(共5题,每题15分)

1.题目:

给定一个无重复元素的数组`nums`和一个目标值`target`,请找出数组中和为目标值的三元组。要求不重复的三元组,并返回所有可能的组合。

答案:

python

defthree_sum(nums,target):

nums.sort()

n=len(nums)

res=[]

foriinrange(n):

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

continue

left,right=i+1,n-1

whileleftright:

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

iftotal==target:

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

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

left+=1

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

right-=1

left+=1

right-=1

eliftotaltarget:

left+=1

else:

right-=1

returnres

解析:

首先对数组进行排序,然后使用固定指针法。遍历数组时,对于每个`nums[i]`,使用双指针`left`和`right`在剩余部分中寻找两个数,使得三数之和等于`target`。为了去重,需要跳过重复的元素。时间复杂度为O(n2)。

2.题目:

请实现一个LRU(最近最少使用)缓存机制。它应该支持以下操作:

-`get(key)`:获取键`key`对应的值,如果键不存在返回-1。

-`put(key,value)`:向缓存中插入一个键值对。如果键已经存在,则更新其值;如果缓存已满,则删除最久未使用的键。

答案:

python

classLRUCache:

def__init__(self,capacity:int):

self.capacity=capacity

self.cache=OrderedDict()

defget(self,key:int)-int:

ifkeynotinself.cache:

return-1

self.cache.move_to_end(key)

returnself.cache[key]

defput(self,key:int,value:int)-None:

ifkeyinself.cache:

self.cache.move_to_end(key)

self.cache[key]=value

iflen(self.cache)self.capacity:

self.cache.popitem(last=False)

解析:

使用`OrderedDict`维护键值对,并记录插入顺序。`get`操作时将键移动到末尾表示最近使用,`put`操作时如果键已存在则更新值并移动到末尾,如果超出容量则删除最早的键。时间复杂度为O(1)。

3.题目:

给定一个非空字符串`s`,请找到最长的不重复子串的长度。

答案:

python

deflength_of_longest_substring(s:str)-int:

char_set=set()

left=0

max_len=0

forrightinrange(len(s)):

whiles[right]inchar_set:

char_set.remove(s[left])

left+=1

char_set.add(s[right])

max_len=max(max_len,right-left+1)

returnmax_len

解析:

使用滑动窗口技术,`left`和`right`分别表示窗口的左右边界。遍历字符串时,如果`s[right]`已存在于窗口中,则移动`left`直到窗口无重复字符。每次更新最大长度。时间复杂度为O(n)。

4.题目:

给定一个正整数`n`,请判断它是否是2的幂。

答案:

python

defis_power_of_two(n:int)-bool:

returnn0and(n(n-1))==0

解析:

2的幂在二进制表示中只有一个`1`

您可能关注的文档

文档评论(0)

1亿VIP精品文档

相关文档