2026年高频面试题解析与答案.docxVIP

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

第PAGE页共NUMPAGES页

2026年高频面试题解析与答案

一、编程语言与算法(共5题,每题10分,总分50分)

题目1:

请用Python实现一个函数,输入一个非空字符串,返回该字符串中不重复字符的最长子串长度。例如,输入`abcabcbb`,输出`3`(对应子串`abc`)。

答案:

python

deflength_of_longest_substring(s:str)-int:

char_set=set()

left=0

max_length=0

forrightinrange(len(s)):

whiles[right]inchar_set:

char_set.remove(s[left])

left+=1

char_set.add(s[right])

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

returnmax_length

解析:

-使用滑动窗口技术,`left`和`right`分别表示窗口的左右边界。

-遍历字符串时,如果当前字符已存在于`char_set`中,则移动`left`直到窗口内无重复字符。

-每次更新`max_length`为当前窗口长度。时间复杂度O(n),空间复杂度O(1)。

题目2:

给定一个整数数组`nums`,返回其中和为`target`的三个数的唯一组合个数。假设所有数字不重复,例如输入`nums=[-1,0,1,2]`,`target=0`,输出`2`(对应`(-1,0,1)`和`(-1,2,1)`)。

答案:

python

defthree_sum_count(nums,target):

nums.sort()

count=0

n=len(nums)

foriinrange(n-2):

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

continue

left,right=i+1,n-1

whileleftright:

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

ifcurrent_sum==target:

count+=1

left+=1

right-=1

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

left+=1

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

right-=1

elifcurrent_sumtarget:

left+=1

else:

right-=1

returncount

解析:

-先排序数组,避免重复组合。

-固定第一个数`nums[i]`,使用双指针`left`和`right`寻找另外两个数,使和为`target`。

-避免重复组合的方法:跳过与上一轮相同的`nums[i]`、`nums[left]`和`nums[right]`。

题目3:

请实现一个二叉树的中序遍历,要求使用非递归方法。例如:输入`[1,null,2,3]`(二叉树结构为`1-2-3`),输出`[1,3,2]`。

答案:

python

definorder_traversal(root):

result,stack=[],[]

current=root

whilestackorcurrent:

whilecurrent:

stack.append(current)

current=current.left

current=stack.pop()

result.append(current.val)

current=current.right

returnresult

解析:

-使用栈模拟递归。先遍历左子树,再访问节点,最后遍历右子树。

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

题目4:

给定一个无重复元素的数组`nums`,返回其所有可能的子集。例如输入`[1,2,3]`,输出`[[],[1],[2],[1,2],[3],[1,3],[2,3],[1,2,3]]`。

答案:

python

defsubsets(nums):

result=[]

subset=[]

nums.sort()

defbacktrack(index):

result.append(subset.copy())

foriinrange(index,len(nums)):

subset.appen

文档评论(0)

1亿VIP精品文档

相关文档