[leetcode/lintcode 题解] 阿里巴巴面试题:浇花

简介: [leetcode/lintcode 题解] 阿里巴巴面试题:浇花

描述
你和你的朋友都是园丁,你们要照顾好你们的植物。这些植物是连续种植的,而且每种植物都需要一定量的水。你们要用水罐给它们浇水。为了避免错误,比如浇水太多,或者根本不给植物浇水,你们决定:
按植物出现的顺序浇水:你要从左到右浇水,你的朋友要从右到左浇水;
如果你有足够的水来浇灌每一棵植物,否则请重新装满你的水壶;
一次浇灌每株植物,即在给一株植物浇灌的过程中,不需要休息一下就可以重新灌满浇灌罐。这意味需要在浇灌植物之前或之后重新灌满浇水罐,即使浇水罐不是完全空的。
你从浇灌第一株植物开始,你的朋友从浇灌最后一株植物开始,你和你的朋友同时浇灌植物(当你浇灌第一株植物时,你的朋友浇灌最后一株;当你浇灌第二株植物时,你的朋友浇灌倒数第二株植物;
等等)这意味着你们将在一排植物中间相遇。如果那里有一棵没有浇水的植物,而且你和你的朋友一起有足够的水来浇水,你可以不用再装满你的水罐来浇水;否则,你们中只有一个人需要再重灌。
一开始你们的浇水罐都是空的,你和你的朋友需要给你的浇水罐重灌多少次水才能浇灌整排的植物?
Write a function::
class Solution{public int solution(int[] plants, int capacity1, int capacity2);}
给定一个包含n个整数(表示每株植物所需的水量)的数组和变量capacity1和capacity2(表示你和你朋友的浇水罐的容量),则返回你和你朋友需要重新装满浇水罐来浇灌所有植物的次数。

  • N 的范围[1..1,000];
  • plants数组中每个元素范围[1..1,000,000];
  • capacity1 和 capacty2 范围[1..1,000,000,000];
  • 两个浇水罐都足够大,可以完全浇灌任何一株植物。

在线评测地址:领扣题库官网

样例1
Input:[2,4,5,1,2],5,7
Output:3
Explanation:First you refill and water plants[0] and simultaneously your friend refills and waters plants[4].Then you refill and water plants[1] and simultaneously your friend waters plants[3].Finally you water plants[2] togerther (as together you have exactly 5 units of water).
样例2
Input:[43,48,29],49,34
Output:3
Explanation:First you water the plants [0], your friends water the plants [2], and finally you water the plants [1].

考点
模拟

题解
按照题意模拟,最后相遇时特判两人能否一起浇灌最后一株植物即可。

class Solution {
public:
    int waterPlants(vector<int> &plants, int capacity1, int capacity2) {
        int can1 = 0;
        int can2 = 0;
        int lo = 0;
        int hi = plants.size() - 1;
        int numRefils = 0;
        while (lo < hi) {
            if (can1 < plants[lo]) {
                can1 = capacity1;
                ++numRefils;
            }
            if (can2 < plants[hi]) {
                can2 = capacity2;
                ++numRefils;
            }
            can1 -= plants[lo++];
            can2 -= plants[hi--];
        }
        if (lo == hi && (plants[lo] > can1 + can2)) {
            return ++numRefils;
        } 
        else {
            return numRefils;
        }
        
    }
};

更多题解参考:九章官网solution
https://www.jiuzhang.com/solution/watering-flowers/?utm_source=sc-tianchi-sz-0226

相关文章
|
1月前
|
算法
【数组相关面试题】LeetCode试题
【数组相关面试题】LeetCode试题
|
1月前
力扣面试经典题之哈希表
力扣面试经典题之哈希表
18 0
|
1月前
|
存储
力扣面试经典题之数组/字符串
力扣面试经典题之数组/字符串
23 0
|
1月前
力扣面试经典题之二叉树
力扣面试经典题之二叉树
16 0
|
23天前
|
算法
【力扣经典面试题】121. 买卖股票的最佳时机
【力扣经典面试题】121. 买卖股票的最佳时机
|
23天前
|
存储
【力扣经典面试题】80. 删除有序数组中的重复项 II
【力扣经典面试题】80. 删除有序数组中的重复项 II
|
1月前
|
机器学习/深度学习 人工智能 算法
LeetCode刷题--- 面试题 01.07. 旋转矩阵(原地旋转+翻转替旋转)
LeetCode刷题--- 面试题 01.07. 旋转矩阵(原地旋转+翻转替旋转)
|
1月前
|
存储 算法 Java
超全面!阿里巴巴最新发布23年秋招200道Java面试题(含答案)
马上过34岁生日了,和大家聊聊最近的情况 半年前还在迷茫该学什么,怎样才能走出现在的困境,半年后已经成功上岸阿里,感谢在这期间帮助我的每一个人。 面试中总结了200道经典的Java面试题,里面包含面试要回答的知识重点,并且我根据知识类型进行了分类,可以说非常全面了~ 因为篇幅原因,大部分的内容就不给大家一一展示了,需要获取的小伙伴可以直接点击此处取到! Java平台相关 1、JDK、JRE、JVM 分别是什么关系? 2、为什么 Java 被称作是“平台无关的编程语言”? 3、Java 和 C++ 的区别? 4、什么是字节码?采用字节码的最大好处是什么? 5、Java运行的过程? 6、
92 4
|
1月前
|
算法 测试技术 索引
力扣面试经典题之数组/字符串(二)
力扣面试经典题之数组/字符串(二)
13 0
|
29天前
|
机器学习/深度学习 算法
力扣刷题日常(一)
力扣刷题日常(一)
20 2