DPメニュー【最長増加連続部分列・最長減少連続部分列】
【最長増加連続部分列】コード
reader.on('close', () => {
const n = Number(lines[0]);
const a = []; // 身長
for (let i = 1; i <= n; i++) {
a.push(Number(lines[i]));
}
const dp = [1]; // a の値が昇順になっている区間
for (let i = 1; i < n; i++) {
a[i - 1] <= a[i] ? dp[i] = dp[i - 1] + 1 : dp[i] = 1;
// a[i]の1つ前の値がa[i]以下なら dp[i]の値は dp[i - 1] + 1 そうじゃなければ 1
// const [a, b] = [lines[i], lines[i + 1]]; // 配列を作らずに値を a, b で受取り
// a <= b ? dp[i] = dp[i - 1] + 1 : dp[i] = 1; // a, b を比較して dp の値を更新
}
console.log(Math.max(...dp));
});
a[i] が a[i – 1]以上なら dp[i] = dp[i – 1] + 1, そうじゃなければ dp[i] = 1。
【最長減少連続部分列】コード
reader.on('close', () => {
const n = Number(lines[0]);
const a = []; // 身長
for (let i = 1; i <= n; i++) {
a.push(Number(lines[i]));
}
const dp = [1]; // a の値が昇順になっている区間
for (let i = 1; i < n; i++) {
a[i - 1] >= a[i] ? dp[i] = dp[i - 1] + 1 : dp[i] = 1;
// a[i]の1つ前の値がa[i]以上なら dp[i]の値は dp[i - 1] + 1 そうじゃなければ 1
// const [a, b] = [lines[i], lines[i + 1]]; // 配列を作らずに値を a, b で受取り
// a >= b ? dp[i] = dp[i - 1] + 1 : dp[i] = 1; // a, b を比較して dp の値を更新
}
console.log(Math.max(...dp));
});
a[i] が a[i – 1]以下なら dp[i] = dp[i – 1] + 1, そうじゃなければ dp[i] = 1。
コメント