原创
思路有时间来填坑
处理好边界
前后俩值相等处,相当于一个分隔符
就可以从头开始处理
上升的话就一路往上升
下降的话就得数数一下
看看一股闹儿下降了多少了
7654321 这样

typescript
function candy(ratings: number[]): number {
let sum = 1;
const len = ratings.length;
if (len === 1) {
return 1;
}
let current = 1;
for (let i = 1; i < len; ++i) {
// 当前的和前一个相等
if (ratings[i - 1] === ratings[i]) {
let j = i;
for (; j < len; ++j) {
sum++;
if (j >= len - 1 || ratings[j] !== ratings[j + 1]) {
break;
}
}
i = j;
current = 1;
}
// 当前比前一个大 每一个挨个直接加即可
else if (ratings[i - 1] < ratings[i]) {
let j = i;
for (; j < len; ++j) {
sum += ++current;
if (j >= len - 1 || !(ratings[j] < ratings[j + 1])) {
break;
}
}
i = j;
}
// 当前比前一个小 得数数了
else if (ratings[i - 1] > ratings[i]) {
let j = i;
for (; j < len; ++j) {
if (j >= len - 1 || !(ratings[j] > ratings[j + 1])) {
break;
}
}
// 把左边处理过的减掉 这个节点需要特殊处理
sum -= current;
current = Math.max(current, j - i + 2);
sum += (j - i + 1) * (2 + j - i) / 2 + current;
i = j;
current = 1;
}
}
return sum;
};