|
4 | 4 | * @return {number}
|
5 | 5 | */
|
6 | 6 | const eatenApples = function (apples, days) {
|
7 |
| - let totalDays = 0 |
8 |
| - if (apples.length === 1) { |
9 |
| - if (days[0] > apples[0]) return apples[0] |
10 |
| - else return days[0] |
11 |
| - } |
12 |
| - let i = 0 |
13 |
| - let applesAvail = 0 |
14 |
| - for (; i < apples.length; i++) { |
15 |
| - if (apples[i] !== 0) { |
16 |
| - totalDays++ |
17 |
| - applesAvail = Math.max(totalDays, i + days[i], applesAvail) |
18 |
| - } else { |
19 |
| - if (applesAvail > i) totalDays++ |
| 7 | + const n = apples.length |
| 8 | + let fin = 0, |
| 9 | + i = 0 |
| 10 | + const q = new PriorityQueue() |
| 11 | + while (i < n || !q.isEmpty()) { |
| 12 | + if (i < n && apples[i] > 0) q.push([i + days[i], apples[i]]) |
| 13 | + while (!q.isEmpty() && (q.peek()[0] <= i || q.peek()[1] === 0)) q.pop() |
| 14 | + if (!q.isEmpty()) { |
| 15 | + q.peek()[1] -= 1 |
| 16 | + if(q.peek()[1] <= 0) q.pop() |
| 17 | + fin += 1 |
20 | 18 | }
|
| 19 | + i += 1 |
21 | 20 | }
|
22 |
| - if (applesAvail > i) return totalDays + (applesAvail - i) |
23 |
| - else return totalDays |
| 21 | + return fin |
24 | 22 | }
|
25 | 23 |
|
26 |
| - |
27 |
| -// another |
28 |
| - |
29 |
| - |
30 |
| -/** |
31 |
| - * @param {number[]} apples |
32 |
| - * @param {number[]} days |
33 |
| - * @return {number} |
34 |
| - */ |
35 |
| -const eatenApples = function(apples, days) { |
36 |
| - |
37 |
| - let ans = 0, n = apples.length; |
38 |
| - const que = new PriorityQueue(); |
39 |
| - for (let i = 0; i < n; i++) { |
40 |
| - while (!que.isEmpty() && que.peek().exp <= i) que.pop(); |
41 |
| - if (que.isEmpty()) { |
42 |
| - if (apples[i] == 0 && days[i] == 0) continue; |
43 |
| - } |
44 |
| - que.push({cnt: apples[i], exp: i + days[i]}); |
45 |
| - ans++; |
46 |
| - let temp = que.peek(); |
47 |
| - que.pop(); |
48 |
| - if (--temp.cnt) que.push(temp); |
49 |
| - } |
50 |
| - let day = n; |
51 |
| - while (!que.isEmpty()) { |
52 |
| - while (!que.isEmpty() && que.peek().exp <= n) que.pop(); |
53 |
| - if (que.isEmpty()) break; |
54 |
| - ans++; |
55 |
| - n++; |
56 |
| - let temp = que.peek(); |
57 |
| - que.pop(); |
58 |
| - if (--temp.cnt) que.push(temp); |
59 |
| - } |
60 |
| - return ans; |
61 |
| -}; |
62 |
| - |
63 | 24 | class PriorityQueue {
|
64 |
| - constructor(comparator = (a, b) => a.exp < b.exp) { |
| 25 | + constructor(comparator = (a, b) => a[0] < b[0]) { |
65 | 26 | this.heap = []
|
66 | 27 | this.top = 0
|
67 | 28 | this.comparator = comparator
|
|
0 commit comments