zoukankan      html  css  js  c++  java
  • 校招真题练习030 丰收(网易)

    丰收

    题目描述
    又到了丰收的季节,恰逢小易去牛牛的果园里游玩。
    牛牛常说他对整个果园的每个地方都了如指掌,小易不太相信,所以他想考考牛牛。
    在果园里有N堆苹果,每堆苹果的数量为ai,小易希望知道从左往右数第x个苹果是属于哪一堆的。
    牛牛觉得这个问题太简单,所以希望你来替他回答。

    输入描述:
    第一行一个数n(1 <= n <= 105)。
    第二行n个数ai(1 <= ai <= 1000),表示从左往右数第i堆有多少苹果
    第三行一个数m(1 <= m <= 105),表示有m次询问。
    第四行m个数qi,表示小易希望知道第qi个苹果属于哪一堆。

    输出描述:
    m行,第i行输出第qi个苹果属于哪一堆。

     1 def main():
     2     N = int(input())
     3     apples = list(map(int,input().split()))
     4     # N = 5
     5     # apples = [2,7,3,4,9]
     6 
     7     apples.insert(0,0)
     8     for i in range(1,N+1):
     9         apples[i] += apples[i-1]
    10     
    11     M = int(input())
    12     questions = list(map(int,input().split()))
    13     # print(apples)
    14     # M = 3
    15     # questions = [1,25,11]
    16     for i in range(M):
    17         cur = questions[i]
    18         l,r = 0,N
    19         while l <= r:
    20             m = l + (r - l) // 2
    21             if cur == apples[m]:
    22                 print(m)
    23                 break
    24             elif cur < apples[m]:
    25                 if m - 1 >= 0 and cur > apples[m-1]:
    26                     print(m)
    27                     break
    28                 else:
    29                     r = m - 1
    30             elif cur > apples[m]:
    31                 if m + 1 <= N and cur < apples[m+1]:
    32                     print(m+1)
    33                     break
    34                 else:
    35                     l = m + 1
    36             else:
    37                 print('error')
    38 
    39 if __name__ == '__main__':
    40     main()

    算法思路:二分查找(变形)

    寻找有序数组中右边界值。可以使用:itertools.accumulate()和bisect.bisect_left()方法简化代码。

  • 相关阅读:
    Python 生成器
    Python 切片
    Visual Studio Code编辑器使用
    linux常用命令
    python selenium学习笔记
    selenium+chrome driver 报错处理 (Driver info: chromedriver=2.45.615291 (ec3682e3c9061c10f26ea9e5cdcf3c53f3f74387),platform=Windows NT 10.0.17763 x86_64)
    python+uiautomator2+fiddler 自动化测试学习总结
    我的第一篇博客
    计算机网络差错控制基本方法
    计算机网络复习笔记(简略)
  • 原文地址:https://www.cnblogs.com/asenyang/p/11290770.html
Copyright © 2011-2022 走看看