算法入门 二分法 找出指定元素的最大下标

我的课本是图解算法附上我的对第一章内容的总结

算法入门 二分法 找出指定元素的最大下标_第1张图片

 

这一次我要跟大家分享的是:再一个已经排好序的数组中找出指定元素的最大下标。要求利用二分法。

分成两步:①首先利用二分法找到输入的元素

                ②然后再和后一位元素做对比,如果相同则下标往后移

把握要点 low、high、mid都是下标,所以返回的是mid,其次就是要小心数组溢出的问题,以及非法值问题

def find_ele(list, need):
    if need not in list:
        print("元素不在列表")
        return -1
    low = 0
    high = len(list) - 1
    while low <= high:
        mid = int((low + high) / 2)
        if need == list[mid]:
            return mid
        if need > list[mid]:
            low = mid + 1
        if need < list[mid]:
            high = mid - 1


def get_max(list, mid):
    while mid < len(list) - 1:
        if list[mid] == list[mid + 1]:
            mid += 1
        else:
            break
    return "max index:" + str(mid)


if __name__ == '__main__':
    list = [1, 2, 3, 3, 3, 3, 3, 4, 4, 4, 5, 5, 5, 5]
    p = int(input("a number from 1-5\n"))
    print(get_max(list, find_ele(list, p)))

结果:

# 测试元素4
a number from 1-5
4
max index:9
# 测试元素100
a number from 1-5
100
元素不在列表
max index:-1

 

你可能感兴趣的:(算法)