数据结构有关的题目(栈,队列,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;
}
相关推荐
NEXT0621 分钟前
前端算法:从 O(n²) 到 O(n),列表转树的极致优化
前端·数据结构·算法
代码游侠1 小时前
学习笔记——设备树基础
linux·运维·开发语言·单片机·算法
mango_mangojuice1 小时前
Linux学习笔记(make/Makefile)1.23
java·linux·前端·笔记·学习
想进个大厂1 小时前
代码随想录day37动态规划part05
算法
sali-tec1 小时前
C# 基于OpenCv的视觉工作流-章22-Harris角点
图像处理·人工智能·opencv·算法·计算机视觉
工程师老罗1 小时前
YOLOv1 核心知识点笔记
笔记·yolo
子春一1 小时前
Flutter for OpenHarmony:构建一个 Flutter 四色猜谜游戏,深入解析密码逻辑、反馈算法与经典益智游戏重构
算法·flutter·游戏
MZ_ZXD0011 小时前
springboot旅游信息管理系统-计算机毕业设计源码21675
java·c++·vue.js·spring boot·python·django·php
人道领域2 小时前
AI抢人大战:谁在收割你的红包
大数据·人工智能·算法
TracyCoder1232 小时前
LeetCode Hot100(34/100)——98. 验证二叉搜索树
算法·leetcode