数据结构有关的题目(栈,队列,set和map)

题目:合理的栈顺序

cpp 复制代码
描述

给定一串字符,每个字符都需要进一个字符栈,它们的进栈顺序即它们在字符串中的顺序,再给出一种可能的出栈顺序字符串,请你编写一个程序检查出栈顺序是否合理,如果不合理请输出"error",如果合理,请输出"right"。

输入描述

输入两行字符串,每行字符串长度不超过 255。

输出描述

输出压缩之后的字符串形式。

用例输入 1 

aabc
abac
用例输出 1 

right

代码:

cpp 复制代码
#include <bits/stdc++.h>
using namespace std;
int j;
string a,b;
int main(){
    cin>>a>>b;
    stack<char> s;
    for(int i=0;i<a.size();i++){
        s.push(a[i]);
        while(s.size() && s.top()==b[j]){
        	j++;
        	s.pop();
        }
    }
    if(s.size()){
        cout<<"error"<<endl;
    }else{
        cout<<"right"<<endl;
    }
	return 0;
}

题目:括号匹配

cpp 复制代码
描述

输入描述

一个字符串,只包含左括号和右括号,长度小于等于10 
5
 。

输出描述

合法的输出YES,不合法的输出NO

用例输入 1 

(()(()))
用例输出 1 

YES

代码:

cpp 复制代码
#include<bits/stdc++.h>
using namespace std;
int j,flat;
string a;
int main(){
    cin>>a;
    stack<char> s;
    
    for(int i=0;i<a.size();i++){
        if(a[i]=='('){
            s.push(a[i]);
        }else if(s.size() && a[i]==')' && s.top()=='('){
            s.pop();
        }else if(s.size()==0 && a[i]==')'){
            cout<<"NO"<<endl;
            return 0;
        }
    }
    if(s.size()){
        cout<<"NO"<<endl;
    }else{
        cout<<"YES"<<endl;
    }
	return 0;
}

题目:约瑟夫环

cpp 复制代码
描述

n 个人围成一圈,从第一个人开始报数,数到 m 的人出列,再由下一个人重新从 1 开始报数,数到 m 的人再出圈,依次类推,直到所有的人都出圈,请输出依次出圈人的编号。

输入描述

输入两个整数 n,m。

输出描述

输出一行 n 个整数,按顺序输出每个出圈人的编号。

用例输入 1 

5 2
用例输出 1 

2 4 1 5 3 

代码:

cpp 复制代码
#include<bits/stdc++.h>
using namespace std;
int n,m,sum,j;
int main(){
    cin>>n>>m;
    queue<int> s;
    for(int i=1;i<=n;i++){
        s.push(i);
    }
    for(int i=1;i<=n*m;i++){
        sum++;
        if(s.size() && sum==m){
            cout<<s.front()<<' ';
            s.pop();
            sum=0;
        }else{
            j=s.front();
            s.pop();
            s.push(j);
        }
    }
    return 0;
}

题目:数组去重

cpp 复制代码
描述

给定一个由n个数组成的数组,请你从小到大输出该数组去重后的元素。

输入描述

一个正整数n,代表数的个数,n<=10 
5
 

输出描述

一行若干数,代表该数组从小到大排序后的元素。

用例输入 1 

6
1 3 3 4 2 2
用例输出 1 

1 2 3 4

代码:

cpp 复制代码
#include<bits/stdc++.h>
using namespace std;
const int N =1e5+10;
int n,a[N];
int main(){
    cin>>n;
    set<int> s;
    for(int i=1;i<=n;i++){
        cin>>a[i];
    }
    for(int i=1;i<=n;i++){
        s.insert(a[i]);
    }
    for(auto x:s){
        cout<<x<<' ';
    }
    return 0;
}

题目:[GESP202503 三级] 词频统计

cpp 复制代码
出题人:

描述

在文本处理中,统计单词出现的频率是一个常见的任务。现在,给定 n 个单词,你需要找出其中出现次数最多的单词。在本题中,忽略单词中字母的大小写(即 Apple、apple、APPLE、aPPle 等均视为同一个单词)。

请你编写一个程序,输入 n 个单词,输出其中出现次数最多的单词。

输入描述

第一行,一个整数 n,表示单词的个数;
接下来 n 行,每行包含一个单词,单词由大小写英文字母组成。
输入保证,出现次数最多的单词只会有一个。

输出描述

输出一行,包含出现次数最多的单词(输出单词为小写形式)。

用例输入 1 

6
Apple
banana
apple
Orange
banana
apple
用例输出 1 

apple
提示

对于所有测试点,1≤n≤100,每个单词的长度不超过 30,且仅由大小写字母组成。

代码:

cpp 复制代码
#include<bits/stdc++.h>
using namespace std;
int n,sum;
string ans;
int main() {
	cin>>n;
    map<string,int> a;
    for(int i=1;i<=n;i++){
        string s;
        cin>>s;
        for(int j=0;j<s.size();j++){
            if(s[j]>='A' && s[j]<='Z'){
                s[j]+=32;
            }
            a[s]++;
            if(a[s]>sum)sum=a[s],ans=s;
        }
    }
    cout<<ans<<endl;
    return 0;
}

题目:向左看齐

cpp 复制代码
描述

给定一个长度为n的数组a 
1,a[2],....,a[n],输出每个位置i上,左边最近的小于a[i]的位置,如果不存在则输出0。

如n=4时
a = {4,7,6,10}
应该按顺序输出0 1 1 3
解释:
i=1时,4左边没有比它小的,输出0
i=2时,7左侧最近比它小的,在下标为1的位置
i=3时,6左侧最近比它小的,在下标为1的位置
i=4时,10左侧最近比它小的,在下标为3的位置

输入描述

第一行一个整数n,代表元素个数,n<=1e5
第二行n个数,代表每个a[i],空格隔开, a[i]<=1e9

输出描述

n个数l[1],l[2],...l[n],每个l[i]代表在原数组第i个位置上,左侧最近的小于a[i]的位置。

用例输入 1 

4
4 7 6 10
用例输出 1 

0 1 1 3

代码(单调栈算法):

cpp 复制代码
#include<bits/stdc++.h>
using namespace std;
int n,a[100005];
int main(){
    cin>>n;
    a[0]=0;
    stack<int> s;
    for(int i=1;i<=n;i++){
        cin>>a[i];
        while(s.size() && a[s.top()]>=a[i]){
            s.pop();
        }
        if(s.size())cout<<s.top()<<' ';
        else cout<<0<<' ';
        s.push(i);
    }
    return 0;
}
相关推荐
Two_brushes.2 小时前
C++ 常见特殊类的设计(含有单例模式)
开发语言·c++
CoderCodingNo2 小时前
【GESP】C++五级练习题(前缀和) luogu-P1114 “非常男女”计划
数据结构·c++·算法
知乎的哥廷根数学学派2 小时前
基于卷积特征提取和液态神经网络的航空发动机剩余使用寿命预测算法(python)
人工智能·pytorch·python·深度学习·神经网络·算法
我是大咖2 小时前
关于柔性数组的理解
数据结构·算法·柔性数组
岑梓铭2 小时前
YOLO深度学习(计算机视觉)—毕设笔记(yolo训练效率加快)
人工智能·笔记·深度学习·神经网络·yolo·计算机视觉
阿班d2 小时前
33333333
c++
Hello_Embed2 小时前
串口面向对象封装实例
笔记·stm32·单片机·学习·操作系统
charlee442 小时前
C++ 封装 C FFI 接口最佳实践:以 Hugging Face Tokenizer 为例
c++·智能指针·tokenizer·ffi·raii
杨浦老苏2 小时前
轻量级自托管笔记与清单利器jotty·page
笔记·docker·markdown·todo·群晖