博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
一、线性结构
阅读量:4956 次
发布时间:2019-06-12

本文共 719 字,大约阅读时间需要 2 分钟。

基础知识:

1.数组;

2.带头结点的双向链表:

---Head

---First

3.循环队列

 

例一:最小值问题

问题描述:

  实现一个n个元素的线性表,每次可以修改其中一个元素,也可以询问闭区间[q,p]中元素的最小值。

  (1<=n,m<=100000)

分析:

  设块长L,则一共有n/L块;

  维护数组B,保存每个块的最小值。

  (每次修改元素的时候,重算x所在块的最小值,即更新B。)

 

例二:最接近的值:

问题描述:

  给一个n个元素的线性表A,对于每个数Ai,找到它之前的数中,和它最接近的数。

分析:

  法一:当每个数字表示的值较小的时候,可以使用数组来进保存:f[i]=1;之后向前向后寻找第一个值为1的数字即可;

  法二:   先排序;

      根据从小到大的顺序构造双向链表,从后往前依次计算C6,C5...等,每计算一个,将这个数字从当前链表中删除。

 

例三:移动窗口:

问题描述:

  有一个长度为n的数组,还有一个k<=n的窗口,窗口一开始在最左边的位置,能看到1-k的元素,每次向右移动一个元素,

直到窗口的右边界达到数组的元素n。

分析:

  分开考虑:

  最小值:

    当窗口内部为 2 3 5 4 的时候,则仍然保存5是不明智的,因为5会始终被4压制,只要4出现,则5就没必要继续存在。

  那么,我们可以将5从表中删除!

  启发:

    算最小值的有用元素即可,进而会形成一个递增序列,最小值就是对首元素。

  关键:

     窗口右移操作,使用链表储存窗口内的有用元素。

 

 

转载于:https://www.cnblogs.com/songacm/p/3323272.html

你可能感兴趣的文章
Spring MVC例子
查看>>
jmeter 断言
查看>>
玩玩小爬虫——抓取时的几个小细节
查看>>
error C4996: 'fopen'
查看>>
Windows向Linux上传文件夹
查看>>
20180104-高级特性-Slice
查看>>
6个SQL Server 2005性能优化工具介绍
查看>>
nginx启动、关闭命令、重启nginx报错open() "/var/run/nginx/nginx.pid" failed
查看>>
day14 Python 内置函数、匿名函数和递归函数
查看>>
BZOJ 3097 Hash Killer I
查看>>
UINavigationController的视图层理关系
查看>>
html阴影效果怎么做,css 内阴影怎么做
查看>>
宏观经济
查看>>
译:面试投行的20个Java问题
查看>>
综合练习:词频统计
查看>>
BZOJ1026: [SCOI2009]windy数
查看>>
ASP.NET应用程序和ASP.NET网站所共有的文件: App_Browsers 等
查看>>
ASP.NET杂货店实战视频 VS2010+SQL2008 三层架构设计开发讲解
查看>>
样板操作数
查看>>
64位UBUNTU下安装adobe reader后无法启动
查看>>