python面试代码题
以下是一些常见的Python面试代码题:
反转字符串
给定一个字符串,编写一个函数来反转它。
示例:
输入: “hello”
输出: “olleh”
代码:
def reverse_string(s):
return s[::-1]
判断回文字符串
给定一个字符串,编写一个函数来判断它是否是回文字符串。回文字符串是指正着读和反着读都一样的字符串。
示例:
输入: “racecar”
输出: True
输入: “hello”
输出: False
代码:
def is_palindrome(s):
return s == s[::-1]
找到两个数组的交集
给定两个数组,编写一个函数来计算它们的交集。
示例:
输入: nums1 = [1,2,2,1], nums2 = [2,2]
输出: [2]
输入: nums1 = [4,9,5], nums2 = [9,4,9,8,4]
输出: [9,4]
代码:
def intersection(nums1, nums2):
return list(set(nums1) & set(nums2))
实现快速排序
给定一个数组,编写一个函数来实现快速排序。
示例:
输入: [3,2,1,5,6,4]
输出: [1,2,3,4,5,6]
代码:
def quick_sort(arr):
if len(arr) <= 1:
return arr
pivot = arr[len(arr) // 2]
left = [x for x in arr if x < pivot]
middle = [x for x in arr if x == pivot]
right = [x for x in arr if x > pivot]
return quick_sort(left) + middle + quick_sort(right)
实现二分查找
给定一个有序数组和一个目标值,编写一个函数来实现二分查找。
示例:
输入: nums = [1,2,3,4,5,6], target = 4
输出: 3
输入: nums = [1,2,3,4,5,6], target = 7
输出: -1
代码:
def binary_search(nums, target):
left, right = 0, len(nums) - 1
while left <= right:
mid = (left + right) // 2
if nums[mid] == target:
return mid
elif nums[mid] < target:
left = mid + 1
else:
right = mid - 1
return -1
实现LRU缓存机制
给定一个缓存大小,实现LRU缓存机制。LRU缓存机制是指,当缓存满时,删除最近最少使用的数据,以便为新数据腾出空间。
示例:
输入: cache_size = 2
cache = LRUCache(cache_size)
cache.put(1, 1)
cache.put(2, 2)
cache.get(1) # 返回 1
cache.put(3, 3) # 删除 key 2
cache.get(2) # 返回 -1
cache.put(4, 4) # 删除 key 1
cache.get(1) # 返回 -1
cache.get(3) # 返回 3
cache.get(4) # 返回 4
代码:
class LRUCache:
def __init__(self, capacity: int):
self.capacity = capacity
self.cache = {}
self.order = []
def get(self, key: int) -> int:
if key in self.cache:
self.order.remove(key)
self.order.append(key)
return self.cache[key]
else:
return -1
def put(self, key: int, value: int) -> None:
if key in self.cache:
self.order.remove(key)
elif len(self.cache) == self.capacity:
del self.cache[self.order[0]]
self.order.pop(0)
self.cache[key] = value
self.order.append(key)