首页 > 其他分享 >洛谷题单指南-常见优化技巧-唯一的雪花 Unique Snowflakes

洛谷题单指南-常见优化技巧-唯一的雪花 Unique Snowflakes

时间:2024-09-03 14:46:52浏览次数:9  
标签:Snowflakes int 洛谷题 元素 次数 ans 序列 Unique 指针

原题链接:https://www.luogu.com.cn/problem/UVA11572

题意解读:本质上是要计算最长连续不重复子序列的长度,典型的双指针应用。

解题思路:

通过双指针来枚举子序列,右指针指向的元素每次记录元素出现的次数,可以借助hash数组h[]

如果枚举到的元素出现次数超过1,则表示左、右指针之间的子序列有重复,左指针++直到右指针的元素次数<=1

不重复子序列的长度即右指针-左指针+1

下面模拟一下样例:i是左指针,j是右指针,h[i]表示i出现的次数

100分代码:

#include <bits/stdc++.h>
using namespace std;

const int N = 1000005;

int t, n, a[N], h[N];

int main()
{
    cin >> t;
    while(t--)
    {
        int ans = 0;
        memset(h, 0, sizeof h);
        cin >> n;
        for(int i = 1; i <= n; i++) cin >> a[i];
        int cnt = 0;
        //通过i,j来枚举,j在右,i在左
        for(int i = 1, j = 1; j <= n; j++)
        {
            h[a[j]]++; //a[j]的数量++
            while(h[a[j]] > 1) //如果数量超过1
            {
                h[a[i]]--; //i右移
                i++;
            }

            ans = max(ans, j - i + 1);
        } 

    cout << ans << endl;
    }

    return 0;
}

 

标签:Snowflakes,int,洛谷题,元素,次数,ans,序列,Unique,指针
From: https://www.cnblogs.com/jcwy/p/18394602

相关文章

  • 洛谷题单指南-常见优化技巧-P2216 [HAOI2007] 理想的正方形
    原题链接:https://www.luogu.com.cn/problem/P2216题意解读:在矩阵中找n*n正方形里最大值和最小值差值的最小值。解题思路:1、枚举法直接枚举所有n*n的正方形的位置,然后在遍历求最大值、最小值,复杂度为O(n^4),显然不能通过。2、二维单调队列既然是求正方形范围内的最值,看起来是......
  • 洛谷题单指南-常见优化技巧-P2032 扫描
    原题链接:https://www.luogu.com.cn/problem/P2032题意解读:求滑动窗口内的最大值,典型的单调队列应用。解题思路:单调队列的三部曲:1、去头。已存入的元素个数超过k,则去头。注意队列里存的是元素下标,只需要用当前下标减去队头元素来判断即可。2、去尾。根据单调队列的单调性,如果......
  • 洛谷题单指南-常见优化技巧-P1950 长方形
    原题链接:https://www.luogu.com.cn/problem/P1950题意解读:在一张n*m个格子的纸上,从没有画过的格子中剪出长方形的方案数。解题思路:1、暴力做法枚举所有的子矩阵O(n^4),然后用二维前缀和计算子矩阵的和,通过和来判断子矩阵是否全部是'.'。2、优化做法针对每一行进行处理,计算包......
  • 独特的倒计时容器uniqueCountdownContainer:修改了倒计时更好用好看了
    <!DOCTYPEhtml><htmllang="zh-CN"><head><metacharset="UTF-8"><metaname="viewport"content="width=device-width,initial-scale=1.0"><title>独特的倒计时容器uniqueCountdow......
  • 洛谷题单指南-常见优化技巧-P2866 [USACO06NOV] Bad Hair Day S
    原题链接:https://www.luogu.com.cn/problem/P2866题意解读:每个牛能看到的右边比他矮的牛,直到有比他高的挡住为止,因此只用找每个牛右边第一个比他高的牛的位置即可计算中间比他矮的有多少。解题思路:典型的单调栈应用,注意,常规的单调栈可以用来:1、找每个数左边第一个比他小的数的......
  • 洛谷题单指南-常见优化技巧-P4147 玉蟾宫
    原题链接:https://www.luogu.com.cn/problem/P4147题意解读:找到一个只包含'F'的最大的子矩形。解题思路:方法1:设R为0,F为1,先计算二维前缀和,再枚举所有子矩形左上角(x1,y1)、右下角(x2,y2),计算子矩形的区间和,更新最大值,只能得到部分分。方法2:对于二维矩阵每个点,定义三个属性:h[][]......
  • 洛谷题单指南-常见优化技巧-P1115 最大子段和
    原题链接:https://www.luogu.com.cn/problem/P1115题意解读:最大连续子序列的和。解题思路:DP的做法可参考:https://www.cnblogs.com/jcwy/p/18144124也可以采用双指针来枚举:i从1开始,j=i用j来枚举连续序列,如果已有序列和+下一个a[j]>=下一个a[j],那个j一直++,累加序列和如果出......
  • 洛谷题单指南-常见优化技巧-P1638 逛画展
    原题链接:https://www.luogu.com.cn/problem/P1638题意解读:在n个数中,选出a、b两个端点,使得a~b之间不同的数字为m,且b-a最小。解题思路:要寻找最小的包括所有数字的区间,可以采用双指针算法1、设i,j分别是左右指针2、如果当前区间内不同数字个数不到m,j往后移3、记录数字个数到m时......
  • 洛谷题单指南-前缀和差分与离散化-P1904 天际线
    原题链接:https://www.luogu.com.cn/problem/P1904题意解读:给出(左端点,高度,右端点)表示的若干建筑,要输出其轮廓,所谓轮廓就是每个点被覆盖的最高建筑的高度所描绘的线。解题思路:如果能计算每个点被覆盖的最高建筑的高度,用数组h[10005]保存,那么输出轮廓的过程只需要枚举每一个点,如......
  • C++ 动态内存管理: `std::unique_ptr
    定义与头文件std::unique_ptr的功能定义于<memory>头文件中。它主要用于管理动态分配的内存,保证资源正确释放。函数模板std::make_unique非数组类型template<classT,class...Args>unique_ptr<T>make_unique(Args&&...args);C++14起用于构造非数组类......