首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >给植物浇水

给植物浇水
EN

Stack Overflow用户
提问于 2022-10-18 14:23:07
回答 1查看 63关注 0票数 -1

我正试图解决以下问题:

“你想用灌水罐给花园里的植物浇水。这些植物排列成一排,从左到右标记为从0到n -1,第一棵植物位于x= i处。在x=-1处有一条河流,你可以在那里重新灌水。”

每个植物都需要一定量的水。你将用以下方式浇水:

按顺序从左到右浇水。在给现有的植物浇水后,如果没有足够的水完全浇灌下一棵植物,则返回河里充分灌装浇水罐。你不能早早给灌水罐加满水。你最初在河边(即x= -1)。在x轴上移动一个单元需要一步。

给定n个整数的0索引整数数组植物,其中plantsi是ith工厂需要的水量,以及表示浇水罐容量的整数,则返回所有植物浇水所需的步骤数。“

下面是我的代码,它通过7项检查,但不通过以下操作: plants=3,2,4,2,1 capacity=6

你能告诉我哪里出了问题吗?

代码语言:javascript
运行
复制
def wateringPlants(self, plants: List[int], capacity: int) -> int:
        steps=0;
        for i in range(0,len(plants)):
            if plants[i]<=capacity:
                steps=steps+1;
                capacity=capacity-plants[i];
            else:
                capacity=capacity;
                steps=steps+2*i+1;
                capacity=capacity-plants[i];
        return steps```
EN

回答 1

Stack Overflow用户

发布于 2022-10-18 14:47:15

代码的问题在于,您将capacity当作是指浇水罐中当前的水量;您实际上需要一个单独的变量来跟踪它。

下面是对您的代码所做的最小更改,它将产生正确的结果。

代码语言:javascript
运行
复制
def wateringPlants(self, plants: List[int], capacity: int) -> int:
    steps=0;
    amount_water = capacity
    for i in range(0,len(plants)):
        if plants[i]<=amount_water:
            steps=steps+1;
            amount_water = amount_water-plants[i];
        else:
            amount_water = capacity;
            steps = steps+2*i+1;
            amount_water = amount_water - plants[i];
    return steps

下面是对上述代码的3次重构,我认为这些重构更合理一些。

备选案文1:

代码语言:javascript
运行
复制
def wateringPlants(self, plants: List[int], capacity: int) -> int:
    i = steps = 0
    amount_water = capacity
    while i < len(plants):
        if plants[i]<=amount_water:
            steps+=1
            amount_water -= plants[i]
            i+=1
        else:
            amount_water = capacity
            steps += 2*i
    return steps

注意:这依赖于plants[i]总是小于或等于capacity这一事实。否则,这段代码可能会导致无限循环。

备选案文2:

代码语言:javascript
运行
复制
def wateringPlants(self, plants: List[int], capacity: int) -> int:
    steps = 0
    amount_water = capacity
    for i in range(len(plants)): 
        if plants[i] > amount_water: 
            steps += 2*i
            amount_water = capacity
        amount_water -= plants[i]
        steps += 1
    return steps

选项3:不要重复添加1,只需添加列表的长度即可。

代码语言:javascript
运行
复制
def wateringPlants(self, plants: List[int], capacity: int) -> int:
    extra_steps = 0
    amount_water = capacity
    for i,p in enumerate(plants): 
        if p > amount_water: 
            extra_steps += 2*i
            amount_water = capacity
        amount_water -= p
    return extra_steps + i + 1
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/74112636

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档