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;
}
相关推荐
机器人零零壹3 小时前
技术白皮书:iRobotCAM如何解决机器人激光切割应用中的核心难点,从CAD离线编程到双目视觉定位与轨迹自适应提升复杂空间曲线切割的精度、效率与柔性化水平
人工智能·算法
布莱克6054 小时前
C/C++ 中变量的声明与定义:区别、联系与常见误区
c语言·开发语言·c++·声明·定义
ZhengEnCi6 小时前
大模型的分类到底怎么分:从基础模型到推理模型、从通用到专用的完整图谱
算法
取名真是6 小时前
Python 算法知识点从基础到进阶
开发语言·python·算法
罗西的思考7 小时前
【轻量化复刻大模型 / KIMI K3】KDA 模块交互式演示
人工智能·算法·机器学习
沫璃染墨9 小时前
从零入门计算机网络系列(十二):HTTP长连接与会话管理详解——从Connection到Cookie与Session
linux·服务器·c++·tcp/ip·ubuntu·http·交互
nm_zfyjt9 小时前
信息流广告投放优化实践:线索成本评估模型与转化链路重构(家装建材案例)
算法·重构·内蒙古朋友圈广告服务商·内蒙古朋友圈获客
xiaoye-duck10 小时前
《C++ 项目:手写大模型接入 SDK》DeepSeek接口设计(下):流式响应实现和测试
开发语言·网络·c++·语言模型
w_zero_one10 小时前
算法--构造
java·数据结构·算法
其实防守也摸鱼10 小时前
信创安全竞赛知识总结与题库
大数据·网络·人工智能·算法·安全·php