程序员面试编程题及答案解析.docxVIP

  • 0
  • 0
  • 约6.2千字
  • 约 19页
  • 2026-03-10 发布于福建
  • 举报

第PAGE页共NUMPAGES页

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

一、算法题(共5题,每题10分)

1.寻找数组中的第K个最大元素(10分)

题目描述:

给定一个不重复的整数数组,返回其中第K个最大的元素。要求不使用排序算法,时间复杂度优于O(nlogn)。

示例:

输入:nums=[3,2,1,5,6,4],k=2

输出:5

提示:

-可以使用快速选择算法(Quickselect)。

2.字符串的回文子串数量(10分)

题目描述:

统计一个字符串中所有回文子串的数量(包括单个字符)。

示例:

输入:abcba

输出:7(a,b,c,b,a,bcba,abcba)

提示:

-可以使用中心扩展法。

3.最长有效括号(10分)

题目描述:

给定一个由(和)组成的字符串,返回最长的有效括号子串的长度。

示例:

输入:(()

输出:2

提示:

-可以使用动态规划或栈。

4.排序链表(10分)

题目描述:

对链表进行排序,要求时间复杂度为O(nlogn),空间复杂度为O(1)。

示例:

输入:1-3-2-5-4

输出:1-2-3-4-5

提示:

-可以使用归并排序。

5.爬楼梯的最少步数(10分)

题目描述:

假设你正在爬楼梯,每次可以爬1或2步,给定总步数n,返回到达顶部的最少步数。

示例:

输入:n=4

输出:2(1+1或2+2)

提示:

-可以使用动态规划。

答案解析

1.寻找数组中的第K个最大元素(10分)

思路:

快速选择算法(Quickselect)基于快速排序的分区思想,时间复杂度为O(n)。

代码:

python

deffindKthLargest(nums,k):

defquickselect(left,right,index):

pivot=nums[right]

l,r=left,right-1

whilel=r:

ifnums[l]pivot:

nums[l],nums[r]=nums[r],nums[l]

r-=1

else:

l+=1

nums[l],nums[right]=nums[right],nums[l]

ifl==index:

returnnums[l]

eliflindex:

returnquickselect(l+1,right,index)

else:

returnquickselect(left,l-1,index)

returnquickselect(0,len(nums)-1,k-1)

解析:

-选择最后一个元素作为基准,分区后基准左边的元素都大于基准,右边的元素都小于基准。

-递归在正确的分区中继续查找,直到找到第k大的元素。

2.字符串的回文子串数量(10分)

思路:

中心扩展法,对于每个字符(或两个字符的中间)作为中心,向两边扩展。

代码:

python

defcountSubstrings(s):

count=0

foriinrange(len(s)):

奇数长度回文

count+=expandFromCenter(s,i,i)

偶数长度回文

count+=expandFromCenter(s,i,i+1)

returncount

defexpandFromCenter(s,left,right):

count=0

whileleft=0andrightlen(s)ands[left]==s[right]:

count+=1

left-=1

right+=1

returncount

解析:

-每个字符都可以作为回文中心,分别向两边扩展统计回文子串。

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

3.最长有效括号(10分)

思路:

使用动态规划,dp[i]表示以i结尾的最长有效括号长度。

代码:

python

deflongestValidParentheses(s):

dp=[0]len(s)

max_len=0

foriinrange(1,len(s)):

ifs[i]==):

ifs[i-1]==(:

dp[i]=(dp[i-2]ifi=2else0)+2

elifi-dp[i-1]0ands[i-dp[i-1]-1]==(:

dp[i]=dp[i-1]+(dp[i-dp[i-1]-2]ifi-dp[i-1]=2else0)+2

max_len=max

文档评论(0)

1亿VIP精品文档

相关文档