HJ178 【模板】双指针

  • 题目
  • 题解(20)
  • 讨论(10)
  • 排行

中等 通过率:18.60% 时间限制:4秒 空间限制:256M

知识点双指针

校招时部分企业笔试将禁止编程题跳出页面,为提前适应,练习时请使用在线自测,而非本地IDE。

描述

对于给定的长度为 nn 的数组 {a1,a2,...,an}{a1​,a2​,...,an​} ,找出最长的区间,满足区间中元素两两不同。

如果有多个这样的区间,依次输出它们。

输入描述:

第一行输入一个整数 n(1≦n≦2×105)n(1≦n≦2×105) 代表数组中的元素数量。

第二行输入 nn 个整数 a1,a2,...,an(0≦ai≦n)a1​,a2​,...,an​(0≦ai​≦n) 代表初始数组。

输出描述:

第一行输出一个整数 m(1≦m≦n)m(1≦m≦n) 代表满足条件的区间数量。

此后 mm 行,每行输出两个整数 l,r(1≦l≦r≦n)l,r(1≦l≦r≦n) 代表满足条件的区间。本题没有 SPJSPJ ,请按照 ll 递增的顺序输出。

示例1

输入:

复制代码
6
1 1 4 5 1 4

复制输出:

复制代码
3
2 4
3 5
4 6
cpp 复制代码
#include <iostream>
#include <vector>
#include <map>

using namespace std;

int main() {
    int n;
    cin >> n;
    vector<int> a(n);
    for (int i = 0; i < n; ++i) {
        cin >> a[i];
    }

    map<int, int> window_counts;
    vector<pair<int, int>> result_intervals;
    int max_len = 0;
    int left = 0;

    for (int right = 0; right < n; ++right) {
        window_counts[a[right]]++;

        while (window_counts[a[right]] > 1) {
            window_counts[a[left]]--;
            left++;
        }

        int current_len = right - left + 1;
        if (current_len > max_len) {
            max_len = current_len;
            result_intervals.clear();
            result_intervals.push_back({left + 1, right + 1});
        } else if (current_len == max_len) {
            result_intervals.push_back({left + 1, right + 1});
        }
    }

    cout << result_intervals.size() << endl;
    for (const auto& p : result_intervals) {
        cout << p.first << " " << p.second << endl;
    }

    return 0;
}
相关推荐
兰令水9 分钟前
leecodecode【单调栈】【2026.6.12打卡-java版本】
java·开发语言·算法
TMT星球18 分钟前
魔法原子上交会首秀VLA K02大模型,完成具身智能从“执行”到“理解”的能力跃迁
人工智能·算法·机器学习
2301_7644413320 分钟前
番茄钟+AI:高效专注的秘密武器
人工智能·算法·数学建模·动态规划·交互
影寂ldy23 分钟前
C# 泛型委托
java·算法·c#
星马梦缘37 分钟前
算法设计与分析 作业三 纯答案
算法
雾沉川1 小时前
Visual C++ 运行库合集 v105.0 部署与故障排查技术指南
开发语言·c++·dll
不知名的老吴1 小时前
经典算法题之行星碰撞
数据结构·算法
丘山望岳1 小时前
剑起霜华——平衡二叉树(AVL树 )精讲
开发语言·数据结构·c++
西安邮电大学1 小时前
有关数组的经典算法题
java·后端·其他·算法·面试
学Linux的语莫1 小时前
大模型微调数据集格式详解:Alpaca、ShareGPT、DPO、KTO、预训练数据怎么构建?
人工智能·算法·机器学习·微调格式