zoukankan      html  css  js  c++  java
  • Codeforces Round #686(Div.3) [C- Sequence

    Codeforces Round #686(Div.3) C- Sequence Transformation

    题目大意:一个数组,选定数组中一个数x,每次可以删掉不包含x的一段,使得最终数组只剩下x,求最小的删除次数。

    可以将一段连续相同的数看成一个数字,然后记录它的出现次数。最小值就是出现次数+1。特例:该数出现在数组开头或结尾,这两种情况每次出现都要-1。

    code1

    #include <iostream>
    #include <algorithm>
    #include <map>
    using namespace std;
    const int N = 2e5 + 10;
    int a[N];
    int main()
    {
        int t;
        cin >> t;
        while(t--)
        {
            int n;
            cin >> n;
            for(int i = 1; i <= n; i++) cin >> a[i];
            map<int, int> mp;
            for(int i = 1; i <= n; i++)
            {
                if(a[i] == a[i - 1]) continue;
                mp[a[i]]++;
            }
            mp[a[1]]--;	// 出现在开头
            mp[a[n]]--;	// 出现在结尾
            int res = n;
            for(int i = 1; i <= n; i++)
            {
                res = min(mp[a[i]] + 1, res);
            }
            cout << res << endl;
        }
    }
    

    code2

    #include <iostream>
    #include <vector>
    #include <algorithm>
    #include <map>
    using namespace std;
    int main()
    {
        cin.tie(nullptr);
        int t;
        cin >> t;
        while(t--)
        {
            int n;
            cin >> n;
            vector<int> a(n);
            for(auto& x : a) cin >> x;
            a.erase(unique(a.begin(), a.end()), a.end()); // stl 去重
            map<int, int> mp;
            n = a.size();
            for(auto x : a) mp[x]++;
            int res = n;
            for(auto& x : a)
            {
                res = min(res, mp[x] + 1 - (a[0] == x) - (a[n - 1] == x));
            }
            cout << res << endl;
        }
    }
    
  • 相关阅读:
    圣诞关你鸟事!
    吾属于人民,如何当家作主
    请不要做浮躁的人!
    被鬼压?
    分手后要记得做10件事情
    人生少走弯路的10条忠告
    不要一辈子靠技术生存
    跨浏览器的 inlineblock 实现[CSS]
    MVC Razor的使用
    SQL Server重温——视图、存储过程
  • 原文地址:https://www.cnblogs.com/vlyf/p/14056289.html
Copyright © 2011-2022 走看看