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;
        }
    }
    
  • 相关阅读:
    迭代合并排序算法
    appendChild和insertBefore的区别
    使用定时器处理数组
    正则表达式 删除string首尾的空白
    图片滚动
    数组合并法(IE7性能优化)
    赋值取值+arguments
    条件预加载(conditional advanceloading)
    Just a Note~
    腾讯马拉松复赛第一场
  • 原文地址:https://www.cnblogs.com/vlyf/p/14056289.html
Copyright © 2011-2022 走看看