题解 | 小红的顺子

小红的顺子

https://www.nowcoder.com/practice/76d6ca3612bd42a2900e540b511d2292

import sys
import bisect

n = int(input())
nums = list(map(int, input().split()))
# res = 0
# cur = 1
# last = nums[0]
# for x in nums:
#     if x - last == 1:
#         cur += 1
#         if cur > res:
#             res = cur
#     else:
#         cur = 1
#     last = x
    
# print(res)

nums.append(n+1)

l = 0
r = n - 1
while l<r:
    mid = (l+r)//2
    if nums[mid] - mid==1:
        l = mid + 1
    elif nums[mid] - mid==2:
        r = mid

res = nums[r] - 2
print(max(res, n-1-res))

二分法,数字比序号大1,说明缺少数字在右侧,否则说明在左侧。

复杂度:log(n)

全部评论

相关推荐

昨天 22:09
已编辑
南昌大学 golang
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务