2026年软件开发工程师面试题目及解答策略.docxVIP

  • 0
  • 0
  • 约5.18千字
  • 约 14页
  • 2026-02-13 发布于福建
  • 举报

2026年软件开发工程师面试题目及解答策略.docx

第PAGE页共NUMPAGES页

2026年软件开发工程师面试题目及解答策略

一、编程题(共5题,每题20分,总分100分)

1.题目(20分):

给定一个链表,删除链表中的倒数第n个节点,并返回删除后的链表。

例如,输入链表为`1-2-3-4-5`,n=2,删除后链表为`1-2-3-5`。

解答策略:

-使用双指针法。

-初始化两个指针`fast`和`slow`,`fast`先走n步,然后两个指针同时移动,当`fast`到达链表末尾时,`slow`指向待删除节点的前一个节点。

-删除`slow.next`节点即可。

代码示例(Python):

python

classListNode:

def__init__(self,val=0,next=None):

self.val=val

self.next=next

defremoveNthFromEnd(head:ListNode,n:int)-ListNode:

dummy=ListNode(0,head)

fast=slow=dummy

fast先走n步

for_inrange(n+1):

fast=fast.next

fast和slow同时移动,直到fast到达末尾

whilefast:

fast=fast.next

slow=slow.next

删除slow.next

slow.next=slow.next.next

returndummy.next

解析:

-双指针法的时间复杂度为O(N),空间复杂度为O(1)。

-使用哑节点(dummy)处理边界情况,如删除头节点。

2.题目(20分):

实现一个无重复字符的最长子串,返回该子串的长度。

例如,输入`s=abcabcbb`,返回`3`(abc)。

解答策略:

-使用滑动窗口和哈希表记录字符上一次出现的位置。

-左指针`left`和右指针`right`表示窗口的左右边界。

-当遇到重复字符时,移动左指针到重复字符的下一个位置。

代码示例(Python):

python

deflengthOfLongestSubstring(s:str)-int:

char_map={}

left=max_len=0

forright,charinenumerate(s):

ifcharinchar_mapandchar_map[char]=left:

left=char_map[char]+1

char_map[char]=right

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

returnmax_len

解析:

-滑动窗口的时间复杂度为O(N),空间复杂度为O(M),M为字符集大小。

-哈希表用于快速查找字符上一次出现的位置。

3.题目(20分):

给定一个整数数组,判断数组中是否存在三个元素a,b,c,使得a+b+c=0。找出所有不重复的三元组。

例如,输入`nums=[-1,0,1,2,-1,-4]`,返回`[[{-1,0,1},{-1,-1,2}]`。

解答策略:

-首先排序数组,然后使用双指针法。

-固定一个数,使用双指针在剩余数组中查找和为0的两数。

-避免重复解的方法是跳过相同的数。

代码示例(Python):

python

defthreeSum(nums:list)-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==0:

result.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

eliftotal0:

left+=1

else:

right-=1

returnresult

解析:

-排序后,时间复杂度为O(N

文档评论(0)

1亿VIP精品文档

相关文档