Skip to content

Commit 2bd2348

Browse files
committed
✨ [135] left & right arrays
1 parent b2e8214 commit 2bd2348

File tree

2 files changed

+94
-52
lines changed

2 files changed

+94
-52
lines changed

135/my_solution.js

+71-43
Original file line numberDiff line numberDiff line change
@@ -3,56 +3,84 @@
33
* @return {number}
44
*/
55
const candy = (ratings) => {
6-
let total = 0, prevSum = 1, min = 0, gap = 0;;
7-
// let total = 0, groupList = [], tmpGroupCount = 0;
8-
for (let i = 0; i < ratings.length; i++) {
9-
let curr = ratings[i],
10-
prev = (undefined === ratings[i - 1]) ? curr : ratings[i - 1],
11-
next = (undefined === ratings[i + 1]) ? curr : ratings[i + 1];
12-
// console.log("__")
13-
// console.log(prev)
14-
// console.log(next)
15-
// let sum = ((curr > prev) || (curr > next)) ? prevSum + 1 : 1;
16-
// if ()
17-
let sum = ((curr > prev) || (curr > next)) ? prevSum + 1 : 1;
18-
console.log("________________")
19-
console.log(`curr:${curr}, sum:${sum}, total:${total}`)
20-
if ((prev < curr || prev === curr) && curr > next) { // first time
21-
min = (prev === curr) ? sum - 1 : sum;
22-
sum = 0;
23-
gap++;
24-
console.log(`Setting the min for the first time min:${min}, gap:${gap}`)
25-
} else if (curr > next) {
26-
sum = 0;
27-
gap++;
28-
console.log(`going down - min:${min}, gap:${gap}`)
29-
} else if (curr < next || prev < curr || next === curr) {
30-
console.log(`going up / stagnent - min:${min}, gap:${gap}, sum:${sum}`)
31-
32-
if (min !== 0) {
33-
sum = 0;
34-
for (let i = 0; i < gap; i++) {
35-
sum += sum + 1;
36-
console.log(`>>> sum:${sum}`)
37-
}
38-
console.log(`> sum:${sum}`)
6+
let leftList = Array(ratings.length).fill(1),
7+
rightList = Array(ratings.length).fill(1);
398

40-
sum = ((((gap + 1) > min) ? (gap + 1) : min) + sum);
41-
console.log(`>> sum:${sum}`)
42-
min = 1;
43-
gap = 1;
44-
total += sum;
45-
sum = 0;
46-
}
9+
for (let i = 0; i < ratings.length; i++) {
10+
let prev = ratings[i - 1];
11+
if (prev === undefined) continue;
12+
if (prev < ratings[i]) {
13+
leftList[i] += leftList[i - 1];
4714
}
15+
}
4816

49-
total += sum; // Going down - dont add
17+
for (let i = ratings.length - 1; i >= 0; i--) {
18+
let behind = ratings[i + 1];
19+
if (behind === undefined) continue;
20+
if (behind < ratings[i]) {
21+
rightList[i] += rightList[i + 1];
22+
}
23+
}
5024

51-
prevSum = sum;
25+
let result = 0;
26+
for (let i = 0; i < ratings.length; i++) {
27+
result += Math.max(leftList[i], rightList[i]);
5228
}
53-
return total;
29+
30+
return result;
5431
};
5532

33+
// const candy = (ratings) => {
34+
// let total = 0, prevSum = 1, min = 0, gap = 0;;
35+
// // let total = 0, groupList = [], tmpGroupCount = 0;
36+
// for (let i = 0; i < ratings.length; i++) {
37+
// let curr = ratings[i],
38+
// prev = (undefined === ratings[i - 1]) ? curr : ratings[i - 1],
39+
// next = (undefined === ratings[i + 1]) ? curr : ratings[i + 1];
40+
// // console.log("__")
41+
// // console.log(prev)
42+
// // console.log(next)
43+
// // let sum = ((curr > prev) || (curr > next)) ? prevSum + 1 : 1;
44+
// // if ()
45+
// let sum = ((curr > prev) || (curr > next)) ? prevSum + 1 : 1;
46+
// console.log("________________")
47+
// console.log(`curr:${curr}, sum:${sum}, total:${total}`)
48+
// if ((prev < curr || prev === curr) && curr > next) { // first time
49+
// min = (prev === curr) ? sum - 1 : sum;
50+
// sum = 0;
51+
// gap++;
52+
// console.log(`Setting the min for the first time min:${min}, gap:${gap}`)
53+
// } else if (curr > next) {
54+
// sum = 0;
55+
// gap++;
56+
// console.log(`going down - min:${min}, gap:${gap}`)
57+
// } else if (curr < next || prev < curr || next === curr) {
58+
// console.log(`going up / stagnent - min:${min}, gap:${gap}, sum:${sum}`)
59+
//
60+
// if (min !== 0) {
61+
// sum = 0;
62+
// for (let i = 0; i < gap; i++) {
63+
// sum += sum + 1;
64+
// console.log(`>>> sum:${sum}`)
65+
// }
66+
// console.log(`> sum:${sum}`)
67+
//
68+
// sum = ((((gap + 1) > min) ? (gap + 1) : min) + sum);
69+
// console.log(`>> sum:${sum}`)
70+
// min = 1;
71+
// gap = 1;
72+
// total += sum;
73+
// sum = 0;
74+
// }
75+
// }
76+
//
77+
// total += sum; // Going down - dont add
78+
//
79+
// prevSum = sum;
80+
// }
81+
// return total;
82+
// };
83+
5684
let x = candy([1, 0, 2]); // 5
5785
// let x = candy([1, 2, 2]); // 4
5886
// let x = candy([1, 2, 87, 87, 87, 2, 1]); // 13

135/solution.js

+23-9
Original file line numberDiff line numberDiff line change
@@ -3,15 +3,29 @@
33
* @return {number}
44
*/
55
const candy = (ratings) => {
6-
let total = 0, prevSum = 1;
6+
let leftList = Array(ratings.length).fill(1),
7+
rightList = Array(ratings.length).fill(1);
8+
79
for (let i = 0; i < ratings.length; i++) {
8-
let curr = ratings[i],
9-
prev = (undefined === ratings[i - 1]) ? curr : ratings[i - 1],
10-
next = (undefined === ratings[i + 1]) ? curr : ratings[i + 1];
11-
let sum = ((curr > prev) || (curr > next)) ? prevSum + 1 : 1;
12-
total += sum;
13-
prevSum = sum;
10+
let prev = ratings[i - 1];
11+
if (prev === undefined) continue;
12+
if (prev < ratings[i]) {
13+
leftList[i] += leftList[i - 1];
14+
}
15+
}
16+
17+
for (let i = ratings.length - 1; i >= 0; i--) {
18+
let behind = ratings[i + 1];
19+
if (behind === undefined) continue;
20+
if (behind < ratings[i]) {
21+
rightList[i] += rightList[i + 1];
22+
}
1423
}
15-
return total;
16-
};
1724

25+
let result = 0;
26+
for (let i = 0; i < ratings.length; i++) {
27+
result += Math.max(leftList[i], rightList[i]);
28+
}
29+
30+
return result;
31+
};

0 commit comments

Comments
 (0)