目录
如果还没有接触过二分算法的核心思想,可以先去看看二分的基本概念
二分的基本算法思想:
def binary_search(n): # 二分查找基础概念算法
# 初始化搜索范围的下界为0
low = 0
# 初始化搜索范围的上界为列表长度,注意这里应该是len(ls) - 1,因为Python列表索引是从0开始的
high = len(ls) - 1
# 当搜索范围的下界小于上界时,继续查找
while low < high:
# 计算中间索引
mid = (low + high) // 2
# 如果中间索引的值等于要查找的数n,则返回中间索引对应的元素
# 注意这里应该是ls[mid]而不是mid,因为我们要比较的是列表中的元素而不是索引,切记
if ls[mid] == n:
# 找到了
return ls[mid]
# 如果要查找的数n小于中间索引mid的值,则在上半部分继续查找
elif n < ls[mid]: # 同样是使用ls[mid]来比较元素
high = mid - 1
# 如果要查找的数n大于中间索引mid的值,则在下半部分继续查找
else:
low = mid + 1
OK,二分算法的基本思想你已经掌握了,上真题
题目分析:
这道题理解起来其实不难,核心点就是我们要使转换前金属个数整除转换后的金属个数的转换效率保持在一个值内。
打个比方假如转换前的金属个数为5,我们想让让他的转换后的个数为2,当V(转换效率,以下同意)为1,很明显5//1=5即转换后金属个数也为5,当V=2,5//2=2,也就是我们两个金属分一组转换成一个高级金属,剩下一个不够转换了。当V=3,5//3=1,只能转换一个了,将其中三个拿出来后剩下两个不足以转换,再往后肯定更不可能了,根据这个思想,我们来尝试做题