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()方法简化代码。

  • 相关阅读:
    Rancher之Pipeline JAVA demo
    rancher使用fluentd-pilot收集日志分享
    SFTP 命令列表以备查询
    WPF中异步更新UI元素
    Android 开发环境在 Windows7 下的部署安装
    Android Studio vs. Eclipse ADT Comparison
    JQuery 滚动条插件perfect-scrollbar
    nginx+php 在windows下的简单配置安装
    MySql 管理操作常用命令
    JS事件调试
  • 原文地址:https://www.cnblogs.com/asenyang/p/11290770.html
Copyright © 2011-2022 走看看