zoukankan      html  css  js  c++  java
  • 校招真题练习011 种花(美团)

    种花

    题目描述
    公园里有N个花园,初始时每个花园里都没有种花,园丁将花园从1到N编号并计划在编号为i的花园里恰好种A_i朵花,他每天会选择一个区间[L,R](1≤L≤R≤N)并在编号为L到R的花园里各种一朵花,那么园丁至少要花多少天才能完成计划?

    输入描述:
    第一行包含一个整数N,1≤N≤10^5。
    第二行包含N个空格隔开的整数A_1到A_N,0≤A_i≤10^4。

    输出描述:
    输出完成计划所需的最少天数。

    思路一:贪心法(AC)

    1 if __name__ == '__main__':
    2     N = int(input())
    3     ary = list(map(int,input().strip().split()))
    4     cnt = 0
    5     for i in range(1,N):
    6         if ary[i-1] > ary[i]:
    7             cnt += ary[i-1] - ary[i]
    8     print(cnt + ary[N-1])

    思路二:分治法(只能通过60%)

     1 def findMinIndex(ary):
     2     minValue = sys.maxsize
     3     minIndex = -1
     4     for i in range(len(ary)):
     5         if ary[i] < minValue:
     6             minValue = ary[i]
     7             minIndex = i
     8     for i in range(len(ary)):
     9         ary[i] -= minValue
    10     return ary,minIndex,minValue
    11 
    12 def calFlowers(ary,L,R):
    13     if L == R:
    14         return ary[L]
    15     elif L < R:
    16         ary2,minI,minV = findMinIndex(ary[L:R+1])
    17         left = calFlowers(ary2,0,minI-1)
    18         right = calFlowers(ary2,minI+1,len(ary2)-1)
    19         return left + right + minV
    20     else:
    21         return 0
    22         
    23 if __name__ == '__main__':
    24     N = int(input())
    25     ary = list(map(int,input().strip().split()))
    26     
    27     result = calFlowers(ary,0,N-1)
    28     print(result)
  • 相关阅读:
    appium 学习教程
    初识Airtest
    C语言的数据类型
    C#黑白棋制作~
    C#黑白棋制作
    C#编写自动关机程序复习的知识
    C语言的预处理命令
    构建智能DNS域名解析服务器
    NFS共享服务
    安装ftp 并在ftp上构建yum仓库 (内网构建,比如主机上不了网)
  • 原文地址:https://www.cnblogs.com/asenyang/p/11100600.html
Copyright © 2011-2022 走看看