2026年程序员面试算法题及答案解析.docxVIP

  • 1
  • 0
  • 约7.54千字
  • 约 23页
  • 2026-02-16 发布于福建
  • 举报

第PAGE页共NUMPAGES页

2026年程序员面试算法题及答案解析

第一部分:数组与字符串(5题,每题10分,共50分)

1.题目(10分):

给定一个整数数组`nums`和一个目标值`target`,请找出数组中和为目标值的三元组个数。要求不重复计算,例如`[1,2,3]`和`[2,1,3]`视为相同的三元组。

示例:

plaintext

输入:nums=[-1,0,1,2],target=0

输出:2

解释:nums[0]+nums[1]+nums[2]=(-1)+0+1=0

nums[0]+nums[3]+nums[2]=(-1)+2+1=0

答案:

python

defthreeSum(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

returnlen(res)

解析:

-首先对数组进行排序,便于使用双指针法。

-遍历数组,对于每个`nums[i]`,使用双指针`left`和`right`在`i`后面寻找两个数,使得三者之和等于`target`。

-为了避免重复计算,当`nums[i]`与前一个数相同时跳过,同样在双指针移动时跳过重复的数。

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

2.题目(10分):

给定一个字符串`s`,请找出其中不含有重复字符的最长子串的长度。例如,`abcabcbb`的最长无重复子串是`abc`,长度为3。

示例:

plaintext

输入:s=abcabcbb

输出:3

解释:最长子串为abc

答案:

python

deflengthOfLongestSubstring(s):

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`并移除`s[left]`直到窗口中没有重复字符。

-每次更新最大长度`max_len`。

-时间复杂度为O(n),空间复杂度为O(min(m,n)),其中m是字符集大小。

3.题目(10分):

给定一个包含`n`个整数的数组`nums`,判断数组中是否存在三个元素a,b,c,使得a+b+c=0?请找出所有和为0的三元组,且三元组中的元素不重复。

示例:

plaintext

输入:nums=[-1,0,1,2,-1,-4]

输出:[[-1,-1,2],[-1,0,1]]

答案:

python

defthreeSum(nums):

nums.sort()

n=len(nums)

res=[]

foriinrange(n):

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

continue

target=-nums[i]

left,right=i+1,n-1

whileleftright:

total=nums[left]+nums[right]

iftotal==target:

res.append([nums[i],nums[

文档评论(0)

1亿VIP精品文档

相关文档