计蒜客 蓝桥杯模拟五 合并数字

蒜头君得到了 nn 个数,他想对这些数进行下面这样的操作,选出最左边的相邻的差的绝对值为 11 的两个数,只保留较小的数,删去较大的数,直到没有两个相邻的差的绝对值为 11 的数,问最多可以进行多少次这样的操作?

输入格式

输入第一行为一个整数 n(1 leq n leq 10^5)n(1n105),表示数字的总数

第二行为 nn 个整数 x_1,x_2,...,x_n(0 leq x_i leq 10^9)x1,x2,...,xn(0xi109),表示这些数。

输出格式

输出一行,为一个整数,表示蒜头君最多可以进行多少次这样的操作。

样例输入

4
1 2 0 1

样例输出

3
用stack使结果简化很多
 1 #include<iostream>
 2 #include<stack>
 3 using namespace std;
 4 int main()
 5 {
 6     stack <int> a;
 7     int sum = 0;
 8     int n,temp;
 9     cin >> n;
10     for (int i = 0; i < n; i++)
11     {
12         cin >> temp;
13         while (!a.empty() && a.top() - temp == 1)
14         {
15             a.pop();
16             sum++;
17         }
18         if (!a.empty() && temp - a.top() == 1) sum++;
19         else a.push(temp);
20     }
21     cout << sum << endl;
22     return 0;
23 }

注:此为大佬的题解改良

原文地址:https://www.cnblogs.com/kangdong/p/8660594.html