给植物浇水

Posted 算法与编程之美

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了给植物浇水相关的知识,希望对你有一定的参考价值。

1 问题

你打算用一个水罐给花园里的n株植物浇水。植物排成一行,从左到右进行标记,编号从0到n-1,其中,第i株植物的位置是x=i.x=-1处有一条河,你可以在那里重新灌满你的水罐。

每一株植物都需要浇特定量的水。按下面描述的方式完成浇水:

  • 按从左到右的顺序给植物浇水

  • 在给当前植物浇完水之后,如果你没有足够的水完全浇灌下一株植物,那么你就需要返回河边重新装满水罐

  • 你不能提前重新灌满水罐

最初,你在河边(也就是x=-1),在x轴上每移动个单位都需要一步给你一个下标从0开始的整数数组plants,数组由n个整数组成.其中plants[i]为第i株植物需要的水量。另有一个整数capacity表示水罐的容量,返回浇灌所有植物需要的步数。

2 方法

我们用一个变量a来接收给plants[i]浇水后剩余的水量,再用一个变量distance来计算步数.

如果a>=plants[i+1],则可以继续给下一株植物浇水,从i到i+1需要的步数就是1,紧接着就先判断剩余的水能否够继续给下一株植物浇水.

如果a<plants[i+1],则需要从plants[i]处返回河边x=-1位置处灌满水,需要的步数是i-(-1)=i+1步,从x=-1来到plant[i+1]位置处浇水,需要的步数为(i+1)-(-1)=i+2步.当最后一株植物浇水完成后,直接返回distance的值.

3 实验结果与讨论

通过实验、实践等证明提出的方法是有效的,是能够解决开头提出的问题。

代码清单 1

plants = [2, 2, 3, 3]
cap = 5
a = cap
distance = 0
for i in range(len(plants) - 1):
   if plants[i] <= a:
       a = a - plants[i]
       if plants[i + 1] <= a:  
           continue        
   distance = (i + 1) * 2 + distance
   a = cap
print(distance + len(plants))

4 结语

针对给植物浇水返回步数问题,提出利用浇水后剩余水量和下一株植物需水量作比较,判断出是否可以继续浇水,从而计算出所需的步数的方法,通过一步一步的计算和简单的例子,以及最终的运行结果都可以证明该方法是有效的。

实习编辑:衡辉

稿件来源:深度学习与文旅应用实验室(DLETA)

以上是关于给植物浇水的主要内容,如果未能解决你的问题,请参考以下文章

LeetCode 2105.给植物浇水 II

LeetCode 2105. 给植物浇水 II

ZOJ 4062 Plants vs. Zombies(二分答案)

有没有啥app可以记录浇水时间

涂鸦智能全功能智慧植物生长系统(硬件)

植物在想什么?智慧盆栽 Lua 直接用表情告诉你