蒜头君得到了 nn 个数,他想对这些数进行下面这样的操作,选出最左边的相邻的差的绝对值为 11 的两个数,只保留较小的数,删去较大的数,直到没有两个相邻的差的绝对值为 11 的数,问最多可以进行多少次这样的操作?
输入格式
输入第一行为一个整数 n(1 leq n leq 10^5)n(1≤n≤105),表示数字的总数
第二行为 nn 个整数 x_1,x_2,...,x_n(0 leq x_i leq 10^9)x1,x2,...,xn(0≤xi≤109),表示这些数。
输出格式
输出一行,为一个整数,表示蒜头君最多可以进行多少次这样的操作。
样例输入
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 }
注:此为大佬的题解改良