• (stack)合并数字


    蒜头君得到了 n 个数,他想对这些数进行下面这样的操作,选出最左边的相邻的差的绝对值为 1 的两个数,只保留较小的数,删去较大的数,直到没有两个相邻的差的绝对值为 1 的数,问最多可以进行多少次这样的操作?
    输入格式
    输入第一行n 表示数字个数
    第二行输入 x1,x2...xn
    输出格式:
    输出一行,为一个整数,表示蒜头君最多可以进行多少次这样的操作。

    输入样例:
    4
    1  2  0  1

    输出样例:
    3

    #include<cstdio>
    #include<iostream>
    #include<string.h>
    #include<stdlib.h>
    #include<stack>
    using namespace std;
    int dp[150][150],s[105]; 
    int n,m,k;
    int ans;
    bool vis[105][105];
    
    int main(){
        stack<int> sk;
        int x;
        cin>>n;
        for(int i=0;i<n;i++){
            cin>>x;                                //将每次输入的数x和栈顶元素比较 
            while(!sk.empty()&&x==sk.top()-1){       //x比栈顶元素小1 表示栈顶元素可消去 循环消去所有比此数x大1的栈顶元素 
                sk.pop();
                ans++;
            }
            if(!sk.empty()&&x==sk.top()+1){          //x比栈顶元素大1 则此数应该被消去 
                ans++;
            }
            else{
                sk.push(x);                         //若此时 该数x 和栈顶元素不存在差1的关系 则将x入栈 
            }
            
        }
        cout<<ans;
        return 0;
    }
  • 相关阅读:
    springboot 整合 memcached l
    文件处理工具类 l
    执行脚本工具类 l
    LRU l
    归并排序 l
    Redis 数据类型 l
    git 常用操作命令 唏嘘
    postmanPOST请求 status 415错误 唏嘘
    MySQL 启动和关闭MySQL服务 唏嘘
    OO和OP
  • 原文地址:https://www.cnblogs.com/xusi/p/12526115.html
Copyright © 2020-2023  润新知