数据结构 station
问题描述
一天,小 L 突然对列车的进出站问题产生了兴趣,如下图所示:
列车只能从 A 进站,或从 B 出站。
列车从 A 进站,进站顺序为 1, 2, 3, 4, 5
列车从 B 出站,出站顺序为 5, 4, 3, 2, 1
现在,小 L 想知道:
列车从 A 进站,进站顺序为 1~n
列车从 B 出站,给定出站的顺序,判断是否可能按照这个顺序出站
★数据输入
第一行一个正整数 n(1<=n<=1000)。
第二行包含 n 个正整数,为 1~n 的某个排列
★数据输出
若能够按照给定的顺序出站,输出”YES” (没有引号)
否则,输出” NO” (没有引号)
解题思路
思路一:判断出栈序列中,比本数小的数是否按降序排列
时间复杂度O(n^2),本题1<=n<=1000,可用
易写,不易错,效率低
思路二:使用栈模拟进栈出栈
时间复杂度O(n)
易写错,效率高
code
solve 1
#include <stdio.h>
#include <stdlib.h> bool popAble(int *p,int len)
{
int i,j;
for(i=; i<len-; i++)
{
int last = p[i];
for(j=i+;j<len;j++)
{
if(p[j]<p[i])
{
if(p[j]<last)
last = p[j];
else
return false;
}
}
}
return true;
} int main()
{
int n,i;
scanf("%d", &n);
int *p = (int *)malloc(sizeof(int)*n);
for(i=; i<n; i++)
scanf("%d", p+i); if(popAble(p,n))
printf("YES\n");
else
printf("NO\n"); free(p);
return ;
}
solve 2
#include <stdio.h>
#include <stdlib.h> #define ERROR 0x7fffffff
#define TYPE int class MyStack//std::stack
{
public:
MyStack(int _maxsize):maxsize(_maxsize),size(){arr = (TYPE *)malloc(sizeof(TYPE)*maxsize);}
~MyStack() { free(arr); }
bool empty() { return size==; }
TYPE top() { return arr[size-]; }//每次用top()前应先调用empty(),判断是否为空
void pop() { --size; }//本题掉pop()前都有调top()与empty(),可保证不为空
void push(TYPE num) { arr[size++] = num; }//构造传入maxsize,保证不爆栈
private:
int maxsize;
int size;
TYPE *arr;
}; int main()
{
int n,i,j;
scanf("%d", &n);
int *p = (int *)malloc(sizeof(int)*n);//若想再省空间,此数组可省,但可读性降低
MyStack s(n); for(i=; i<n; i++)
scanf("%d", p+i); for(i=,j=;i<=n;)
{
if(i==p[j])
{
i++;
j++;
}
else if(!s.empty() && s.top()==p[j])
{
s.pop();
j++;
}
else
{
s.push(i);
i++;
}
} while(!s.empty())
{
if(s.top()==p[j])
{
j++;
s.pop();
}
else
{
printf("NO\n");
free(p);
return ;
}
}
printf("YES\n"); free(p);
return ;
}
数据结构 station的更多相关文章
- LeetCode_算法及数据结构覆盖统计
[输入]共计151道题的算法&数据结构基础数据 (见附录A) [输出-算法]其中有算法记录的共计 97道 ,统计后 结果如下 top3(递归,动态规划,回溯) 递归 动态规划 回溯 BFS ...
- 134. Gas Station加油站
[抄题]: There are N gas stations along a circular route, where the amount of gas at station i is gas[i ...
- hdu 1022:Train Problem I(数据结构,栈,递归,dfs)
Train Problem I Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others)T ...
- POJ 2031 Building a Space Station【经典最小生成树】
链接: http://poj.org/problem?id=2031 http://acm.hust.edu.cn/vjudge/contest/view.action?cid=22013#probl ...
- 算法与数据结构基础 - 贪心(Greedy)
贪心基础 贪心(Greedy)常用于解决最优问题,以期通过某种策略获得一系列局部最优解.从而求得整体最优解. 贪心从局部最优角度考虑,只适用于具备无后效性的问题,即某个状态以前的过程不影响以后的状态. ...
- 多线程爬坑之路-学习多线程需要来了解哪些东西?(concurrent并发包的数据结构和线程池,Locks锁,Atomic原子类)
前言:刚学习了一段机器学习,最近需要重构一个java项目,又赶过来看java.大多是线程代码,没办法,那时候总觉得多线程是个很难的部分很少用到,所以一直没下决定去啃,那些年留下的坑,总是得自己跳进去填 ...
- 一起学 Java(三) 集合框架、数据结构、泛型
一.Java 集合框架 集合框架是一个用来代表和操纵集合的统一架构.所有的集合框架都包含如下内容: 接口:是代表集合的抽象数据类型.接口允许集合独立操纵其代表的细节.在面向对象的语言,接口通常形成一个 ...
- 深入浅出Redis-redis底层数据结构(上)
1.概述 相信使用过Redis 的各位同学都很清楚,Redis 是一个基于键值对(key-value)的分布式存储系统,与Memcached类似,却优于Memcached的一个高性能的key-valu ...
- 算法与数据结构(十五) 归并排序(Swift 3.0版)
上篇博客我们主要聊了堆排序的相关内容,本篇博客,我们就来聊一下归并排序的相关内容.归并排序主要用了分治法的思想,在归并排序中,将我们需要排序的数组进行拆分,将其拆分的足够小.当拆分的数组中只有一个元素 ...
随机推荐
- Ubuntu 16.10 Apache PHP Server
/******************************************************************************************* * Ubunt ...
- 场景中GameObject无法用代码隐藏问题(setActive为false)
GameObject不受代码控制隐藏问题:代码中若对某个gameobject.setActive(false),发现会不起作用,总结下来发现是和object所在模型组的Animator组件的anima ...
- 用HAWQ轻松取代传统数据仓库(八) —— 大表分区
一.HAWQ中的分区表 与大多数关系数据库一样,HAWQ也支持分区表.这里所说的分区表是指HAWQ的内部分区表,外部分区表在后面“外部数据”篇讨论.在数据仓库应用中,事 实表通常有非常多 ...
- [Luogu3727]曼哈顿计划E
luogu 题意(简化版) 给你一棵树,每个点上有一个\(SG\)值,问你是否存在一条路径使得\(SG\)异或和为\(0\). sol 可以当做每个点的稳定值就是这个点上的石子数量. 很显然我们只需要 ...
- Linux之时间、地点、人物、事件、情节
时间 date 显示当前时间 time cmd 显示 cmd的运行时间 地点 locate 根据文件名,迅速找到文件.基于系统构建的索引 find 根据各种规则找到文件,更强大,但比较慢 wherei ...
- BZOJ4154:[IPSC2015]Generating Synergy
浅谈\(K-D\) \(Tree\):https://www.cnblogs.com/AKMer/p/10387266.html 题目传送门:https://lydsy.com/JudgeOnline ...
- DevExpress TreeList GridView 样式设置
1.GridView 样式设置 this.gridViewUser.PaintStyleName = "Flat"; 2.TreeList 样式设置 this.treeListDe ...
- 如何通过ISO安装win7程序
从下载u启动工具到安装Ghost Win7系统教程 来源:http://www.uqidong.com时间:2013-08-12 09:17:38 怎样用u启动u盘启动盘安装ghost系统?u启动制作 ...
- iOS消息转发机制
iOS消息转发机制 “消息派发系统”(message-dispatch system) 若想令类能够理解某条消息,我们必须实现出对应的方法才行.但是,在编译器向类发送其无法解读的消息时并不会报错,因为 ...
- 【转】ruby中nil?, empty? and blank?的选择
In Ruby, you check with nil? if an object is nil:article = nil article.nil? # => true empty? chec ...