python算法面试题
时间: 2023-05-16 22:03:02 浏览: 317
Python算法面试题比较多,常见的考点有数据结构、动态规划、贪心算法、递归与分治、字符串处理与正则表达式等等。以下以具体题目进行分析:
1. “用Python实现斐波那契数列”:
斐波那契数列是一个经典的算法问题,可以用递归或者循环的方式实现。Python代码如下:
递归实现:
```
def fibonacci(n):
if n < 2:
return n
else:
return fibonacci(n-1) + fibonacci(n-2)
```
循环实现:
```
def fibonacci(n):
if n < 2:
return n
prev, curr = 0, 1
for i in range(n-1):
prev, curr = curr, prev+curr
return curr
```
2. “给定一个字符串,找出其中最长的回文子串”:
这是一个比较有难度的问题,可以用动态规划或者中心扩展法实现。Python代码如下:
动态规划实现:
```
def longest_palindrome(s):
if not s:
return ""
n = len(s)
dp = [[False]*n for _ in range(n)]
start, max_len = 0, 1
for i in range(n):
dp[i][i] = True
for j in range(i):
if s[i] == s[j] and (i-j <= 2 or dp[j+1][i-1]):
dp[j][i] = True
if i-j+1 > max_len:
max_len = i-j+1
start = j
return s[start:start+max_len]
```
中心扩展法实现:
```
def longest_palindrome(s):
if not s:
return ""
n = len(s)
start, max_len = 0, 1
for i in range(n):
l, r = i, i
while r < n-1 and s[r] == s[r+1]:
r += 1
while l > 0 and r < n-1 and s[l-1] == s[r+1]:
l -= 1
r += 1
if r-l+1 > max_len:
max_len = r-l+1
start = l
return s[start:start+max_len]
```
3. “给定一个无序数组,找出其中第k大的元素”:
这是一个比较常见的问题,可以使用快速选择算法实现。Python代码如下:
快速选择实现:
```
import random
def quick_select(nums, k):
n = len(nums)
pivot = random.choice(nums)
lt = [x for x in nums if x < pivot]
eq = [x for x in nums if x == pivot]
gt = [x for x in nums if x > pivot]
if k <= len(gt):
return quick_select(gt, k)
elif k <= len(gt) + len(eq):
return pivot
else:
return quick_select(lt, k-len(gt)-len(eq))
```
以上是Python算法面试题的部分实现,不同题目可能涉及的知识点不同,需要根据具体情况进行思考和实现。需要注意的是,除了代码的正确性,时间复杂度和空间复杂度也是考察算法能力的重要指标。
阅读全文