截取数组逆序插入到数组前,原数组开始位置

昨天看到道题
有一个严格递增或递减数组
截取后半段逆序加到前面

求原数组开始位置的数

比如
100 90 80 5 6 7 8
结果5

以为二分可做 然而感觉不好做

三分太好理解了  求凹凸函数最值

# -*- coding: utf-8 -*-
def tri_search(nums_list,is_max):    #求凹凸函数最值
    l,r,mid,mmid = 0,len(nums_list)-1,0,0

    while(l<r-2):  #剩三个点

        mid = (l+r)//2
        mmid = (mid+r)//2
        if is_max:
            if(nums_list[mid] < nums_list[mmid]):
                l = mid
            else:
                r = mmid
        else:
            if (nums_list[mid] > nums_list[mmid]):
                l = mid
            else:
                r = mmid
    mid = (l+r)//2
    print(l,r,mid)
    if(is_max):
        return max(max(nums_list[l],nums_list[r]),nums_list[mid])
    else:
        return min(min(nums_list[l], nums_list[r]), nums_list[mid])


if __name__ == '__main__':
    nums_list = list(map(int, input().split()))
    if len(nums_list) <= 2:
        print(nums_list[0])
    else:
        is_max = nums_list[0] < nums_list[1]   #是否求最大值
        print(tri_search(nums_list,is_max))


#30 20 10 2 3 4 5 6 7 9
#3 1 2
#4 3 1 2
#4 1 2 3

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值