数据结构有关的题目(栈,队列,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;
}
相关推荐
归去_来兮5 小时前
拉格朗日插值算法原理及简单示例
算法·数据分析·拉格朗日插值
千寻girling11 小时前
Python 是用来做 AI 人工智能 的 , 不适合开发 Web 网站 | 《Web框架》
人工智能·后端·算法
颜酱14 小时前
一步步实现字符串计算器:从「转整数」到「带括号与优化」
javascript·后端·算法
不想写代码的星星15 小时前
std::function 详解:用法、原理与现代 C++ 最佳实践
c++
齐生11 天前
iOS 知识点 - 渲染机制、动画、卡顿小集合
笔记
CoovallyAIHub1 天前
语音AI Agent编排框架!Pipecat斩获10K+ Star,60+集成开箱即用,亚秒级对话延迟接近真人反应速度!
深度学习·算法·计算机视觉
NineData1 天前
数据库管理工具NineData,一年进化成为数万+开发者的首选数据库工具?
运维·数据结构·数据库
木心月转码ing1 天前
Hot100-Day14-T33搜索旋转排序数组
算法
会员源码网2 天前
内存泄漏(如未关闭流、缓存无限增长)
算法
用户962377954482 天前
VulnHub DC-1 靶机渗透测试笔记
笔记·测试