Python 每日一题:锻炼Python语法的运用,思维逻辑的锻炼,算法能力的培养。
题目:
从有序数字列表中找到目标值,并返回其索引,如果目标值不在列表中,返回它可以按顺序插入的索引。
输入:[3, 5, 6, 8, 9] 8
输出:3
输入:[1, 2, 6, 8, 9] 5
输出:2
分析:
2、需循环判断 left <= right,计算出中间位置的索引值
(1)如果中间值与目标值相同,则返回中间值,即为目标数的索引值。
(2)如果中间索引值对应的数小于目标数,则查找区间左侧位置移动到中间位置向后的1个位置,否则查找区间右侧位置移动到中间位置向前的1个位置。
3、如果在循环中没查找到目标值,则返回左侧的索引值,即为插入元素的索引值位置。
实现:
def search_insert_index(list_number, target):
'''
从有序列表中返回目标数的索引值
:param list_number: list,目标数据列表
:param target: int, 查找的目标数
:return: int, 存在则返回元素的下标,不存在则返回插入的索引值位置
'''
left = 0
right = len(list_number) - 1
while left <= right:
mid = (left + right) // 2
if list_number[mid] == target:
return mid
elif list_number[mid] < target:
left = mid + 1
else:
right = mid - 1
return left
L = [2, 4, 6, 7, 9]
print('结果为:', search_insert_index(L, 7))
print('结果为:', search_insert_index(L, 8))
结果:
结果为: 3
结果为: 4
【结语】以上整个程序的实现逻辑,还存在很多不全面的地方,欢迎各位大佬指点;如果觉得笔者不易,请给予点赞,给予我记录更多文章的动力!!