首页 > 试题广场 >

苹果树

[编程题]苹果树
  • 热度指数:2018 时间限制:C/C++ 1秒,其他语言2秒 空间限制:C/C++ 256M,其他语言512M
  • 算法知识视频讲解
牛牛有一个苹果园。又到了一年一度的收获季,牛牛现在要去采摘苹果买给市场的摊贩们。

牛牛的果园里面有n棵苹果树,第i棵苹果树上有个果子。
牛牛为了保证果子的新鲜程度,每天都会去苹果树上采摘果子。
牛牛特意安排一个计划表:

  • 计划m天去采摘果子。
  • 对于第i天,它会去所有果树上轮流采摘个果子。
  • 如果对于第i天,某棵果树上没有个果子,那么它只会把当前果树上的果子采摘完。
牛牛想知道它每天能供应多少个苹果给市场的摊贩们。

返回一个数组 (代表每一天的真实苹果采摘量)

示例1

输入

[10,20,10],[5,7,2]

输出

[15,17,2]

说明

苹果树上的果子变化[10,20,10]-->[5,15,5]-->[0,8,0]-->[0,6,0]

备注:

一个vector a ()
一个vector b ()

public class Solution {
    /**
     * 
     * @param a int整型一维数组 
     * @param b int整型一维数组 
     * @return long长整型一维数组
     */
    public long[] solve (int[] a, int[] b) {
        // write code here
        Queue<Integer> heap = new PriorityQueue<>();
        for(int i:a){
            heap.add(i);
        }
        long[] ans = new long[b.length];
        int mark = 0;
        for(int i = 0; i < b.length; i++){
            mark += b[i];
            ans[i] =(long) b[i]*heap.size();
            while(!heap.isEmpty() && mark>=heap.peek()){
                ans[i] -= (mark-heap.poll());
            }
        }
        return ans;
    }
}
发表于 2020-08-03 10:54:19 回复(0)

大佬们,哪里不对,只能通过 70%。。。

public long[] solve (int[] a, int[] b) {
    PriorityQueue heap = new PriorityQueue();
    for (int i : a) {
        heap.add((long) i);
    }
    long[] result = new long[b.length];
    long count = 0;
    for (int i = 0; i < b.length; i++) {
        count += b[i];
        while (!heap.isEmpty() && heap.peek() <= count) {
            result[i] += (heap.poll() - (count - b[i]));
        }
        result[i] += heap.size() * b[i];
    }
    return result;
}
发表于 2020-07-03 17:58:17 回复(1)

问题信息

难度:
2条回答 4616浏览

热门推荐

通过挑战的用户

查看代码