题解 | 小红的数组清空

小红的数组清空

https://www.nowcoder.com/practice/c0784de498ca4779b3dc2a75fddcf12b

这个题目一开始拿到之后的思路是很明显的,就是统计连续片段的个数,但是这种思路会忽视连选数字的并行情况例如(111222这种得到的cost会是6,所以使用multiset来进行删除工作,逻辑不变,更加符合直觉。

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

int main()
{
    int n;
    cin >> n;
    multiset<int> nums;
    for(int i = 0; i < n; i++)
    {
        int a; 
        cin >> a;
        nums.insert(a);
    }
    int cost = 0;
    while(!nums.empty())
    {
        cost++;
        auto start = nums.begin();
        int cn = *start;
        nums.erase(start);

        while(true)
        {
            int next = cn + 1;
            auto it = nums.find(next);
            if(it!=nums.end())
            {
                cn = *it;
                nums.erase(it);
                
            }
            else break;
        }
   
    }
    
    cout << cost << endl;
}

全部评论

相关推荐

King987:待优化的地方还是挺多的,可以参考一下我的作品优化一下,优化不好的话也可以找我
点赞 评论 收藏
分享
哞客37422655...:这就是真实社会,没有花里胡哨的安慰,让你感受到阶级分明,不浪费彼此时间。虽然露骨但是唉
点赞 评论 收藏
分享
评论
1
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务