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

五人分鱼

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

归并排序

排序思想:

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

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

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基础、爬虫、框架、数据分析、机器学习等,不怕你学不会!

https://shimo.im/docs/JWCghr8prjCVCxxK/ 《Python学习资料》

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

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值