面试宝典:Python经典算法面试题实例解析

679 阅读3分钟

五人分鱼

1、题目

A、B、C、D、E五人在某天夜里合伙捕鱼,最后疲惫不堪各自睡觉。

第二天A第一个醒来,他将鱼分为5份,扔掉多余的1条,拿走自己的一份。

B第二个醒来,也将鱼分为5份,扔掉多余的1条,拿走自己的一份。

然后C、D、E依次醒来也按同样的方式分鱼,问他们至少捕了多少条鱼?

2、解题思路

使用穷举法,假设有x条鱼,那么 x-1除以5可以整除;

剩下的鱼的数量为((x-1)/5)*4,这个数量同样满足前边的条件。

python代码如下:

def fish():
  """ 五人分鱼 """
  fish = 1
  while True:
    total = fish
    enough = True
    for _ in range(5):
      if (total - 1) % 5 == 0:
        total = (total - 1) // 5 * 4
      else:
        enough = False
        break
    if enough:
      print(fish)
      break
    fish += 1

归并排序

file

排序思想:

把一个数组平分成两个数组,然后分别再把两个数组分别平均分成两个数组,直到每个数组中只有一个元素为止;

然后依次把两个数组排序合并成有序的数组,直到最终合并完成。

python代码如下:

def merge_sort(arr):
  """ 归并法/分治法排序 """
  if len(arr) < 2:
    return arr[:]
  mid = len(arr) // 2
  left = merge_sort(arr[:mid])
  right = merge_sort(arr[mid:])
  return merge(left, right)
​
def merge(left, right):
  print(left)
  print(right)
  print('\n')
  result = []
  index_left, index_right = 0, 0
​
  while index_left < len(left) and index_right < len(right):
    if left[index_left] <= right[index_right]:
      result.append(left[index_left])
      index_left += 1
    else:
      result.append(right[index_right])
      index_right += 1
  result += left[index_left:]
  result += right[index_right:]
  return result

选择排序

排序原理:

取需排序数组的第一个值,作为基准比较值,然后从第二个值开始循环,依次跟这个基准值做比较,如果比基准值小,则交换位置。第二次循环,则取第二个值作为基准值,依此类推。

python代码如下:

def select_sort(origin_items):
  """ 选择排序算法 """
  items = origin_items[:]
  for i in range(len(items) -1):
    min_index = i
    for j in range(i + 1, len(items)):
      if items[j] < items[min_index]:
        min_index = j
    items[i], items[min_index] = items[min_index], items[i]
​
  return items

冒泡排序

排序思想:

从第一个数组元素开始,依次比较相邻两个元素的值,保持大的数值在后边,那么第一次循环过后,最大的一个数就到了最后的位置。

第二次循环从0开始到倒数第二个元素,因为最后一个元素已经是最大的了,无需在进行比较,然后重复上述步骤,依次类推。

python代码如下:

def bubble_sort(origin_items):
  """ 冒泡排序算法 """
  items = origin_items[:]
  for i in range(len(items) - 1):
    for j in range(0, len(items) - 1 -i):
      if items[j] > items[j + 1]:
        items[j], items[j + 1] = items[j + 1], items[j]
  return items

文源网络,仅供学习之用,侵删。

在学习Python的道路上肯定会遇见困难,别慌,我这里有一套学习资料,包含40+本电子书,800+个教学视频,涉及Python基础、爬虫、框架、数据分析、机器学习等,不怕你学不会! shimo.im/docs/JWCghr… 《Python学习资料》

关注公众号【Python圈子】,优质文章每日送达。

file