题解 | 小红的区间删除

小红的区间删除

https://www.nowcoder.com/practice/69d1f3e2b1624e958cbf81d74b6cd840

const rl = require("readline").createInterface({ input: process.stdin });
var iter = rl[Symbol.asyncIterator]();
const readline = async () => (await iter.next()).value;

void (async function () {
    // 读取输入
    const n = parseInt(await readline());
    const arr = (await readline()).split(" ").map(Number);

    const firstOccurrence = new Map(); // 存储数值第一次出现的索引
    const lastOccurrence = new Map(); // 存储数值最后一次出现的索引
    let maxDeleted = 0; // 记录最大删除数量

    // 遍历数组,记录每个数值的第一次和最后一次出现的位置
    for (let i = 0; i < n; i++) {
        const num = arr[i];
        if (!firstOccurrence.has(num)) {
            firstOccurrence.set(num, i);
        }
        lastOccurrence.set(num, i);
    }

    // 计算所有可能的 j - i - 1,取最大值
    for (const [num, first] of firstOccurrence) {
        const last = lastOccurrence.get(num);
        if (first !== last) {
            // 确保有两个不同的位置
            maxDeleted = Math.max(maxDeleted, last - first - 1);
        }
    }

    console.log(maxDeleted);
})();

全部评论

相关推荐

点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务