在面试中,常见的算法题包括排序算法、查找算法、动态规划、贪心算法等。以下是一些常见算法题及其Python实现示例:
1. 快速排序(Quick Sort):
- 题目描述:给定一个数组,使用快速排序算法对数组进行排序。
- 示例代码:
python
def quickSort(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 quickSort(left) + middle + quickSort(right)
2. 二分查找(Binary Search):
- 题目描述:给定一个已排序数组和一个目标值,使用二分查找算法在数组中查找目标值的索引。
- 示例代码:
python
def binarySearch(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
3. 最长递增子序列(Longest Increasing Subsequence):
- 题目描述:给定一个无序的整数数组,找到其中最长的递增子序列的长度。
- 示例代码:
python
def lengthOfLIS(nums):
if not nums:
return 0
dp = [1] * len(nums)
for i in range(len(nums)):
for j in range(i):
if nums[i] > nums[j]:
dp[i] = max(dp[i], dp[j] + 1)
return max(dp)
4. 零钱兑换(Coin Change):
- 题目描述:给定一些不同面额的硬币和一个总金额,计算出凑成总金额所需的最少硬币数量。
- 示例代码:
python
def coinChange(coins, amount):
dp = [float('inf')] * (amount + 1)
dp[0] = 0
for i in range(1, amount + 1):
for coin in coins:
if i >= coin:
dp[i] = min(dp[i], dp[i-coin] + 1)
return dp[amount] if dp[amount] != float('inf') else -1