赞
踩
描述
Alice 和 Bob 在一个漂亮的果园里面工作,果园里面有N棵苹果树排成了一排,这些苹果树被标记成1 - N号。
Alice 计划收集连续的K棵苹果树上面的所有苹果,Bob计划收集连续的L棵苹果树上面的所有苹果。
Alice和Bob选择的区间不可以重合,你需要返回他们能够最大收集的苹果数量。
在线评测地址
LintCode 领扣样例1
- 示例 1:
- 输入:
- A = [6, 1, 4, 6, 3, 2, 7, 4]
- K = 3
- L = 2
- 输出: 24
- 解释:因为Alice 可以选择3-5颗树然后摘到4 + 6 + 3 = 13 个苹果, Bob可以选择7-8棵树然后摘到7 + 4 = 11个苹果,因此他们可以收集到13 + 11 = 24。
样例2
- 示例 2:
- 输入:
- A = [10, 19, 15]
- K = 2
- L = 2
- 输出: -1
- 解释:因为对于 Alice 和 Bob 不能选择两个互不重合的区间。
解题思路
这题的重点在于如何快速地得到数组上一个区间内所有值的和,我们可以用前缀和来解决。
prefixSum(i)代表数组的前i个数的和,我们可以通过一次遍历求出,prefixSum(i) = prefixSum(i - 1) + A(i)。
那么rangeSum(l, r) = prefixSum(r) - prefixSum(l - 1),就可以在O(1)时间内求出数组上的区间和。
代码思路
复杂度分析
设苹果树个数为N。
时间复杂度
空间复杂度
- public class Solution {
-
- /**
- * @param A: a list of integer
- * @param K: a integer
- * @param L: a integer
- * @return: return the maximum number of apples that they can collect.
- */
- public int PickApples(int[] A, int K, int L) {
-
- int n = A.length;
- if (n < K + L) {
-
- return - 1;
- }
- int[]</
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。