- 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)