免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
12下一页
最近访问板块 发新帖
查看: 3184 | 回复: 11
打印 上一主题 下一主题

给大家一道题哈~~~俗话说有乐趣要分享,大家好才是真的好! [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2008-03-28 11:56 |只看该作者 |倒序浏览
有一个长度为N的先入先出队列,其中每个元素包含两个int,找寻其中M个“连续”元素,记录有多少组元素满足要求。
其中连续的含义:举个例子(1,2)(3,1)(4,5)这3个元素就是连续的,首先要保证先后次序((1,2)(4,5)(3,1)就不连续),然后是第一个元素中两int的和等于第二个元素的第一个int的值。
另:队列中的元素可以随意修改,但不能漏掉满足要求的情况
呵,看谁的效率最高哈~~~~最重要的是,have fun!!!

论坛徽章:
1
技术图书徽章
日期:2014-03-06 15:32:30
2 [报告]
发表于 2008-03-28 12:15 |只看该作者
这个一次遍历就好了吧,复杂度O(n)

论坛徽章:
0
3 [报告]
发表于 2008-03-28 12:41 |只看该作者
首先遍历建立一个连续表,以后再修改其中元素的值的时候就可以只看其前后节点了。

论坛徽章:
0
4 [报告]
发表于 2008-03-28 12:55 |只看该作者
建立表分配释放内存,不是会拖慢效率么?
而且遍历的算法是怎样的呢?

论坛徽章:
0
5 [报告]
发表于 2008-03-28 13:10 |只看该作者
这个标题咋看咋怪,楼主是在练拐弯技巧吗?

论坛徽章:
3
2015年迎新春徽章
日期:2015-03-04 09:56:11数据库技术版块每日发帖之星
日期:2016-08-03 06:20:00数据库技术版块每日发帖之星
日期:2016-08-04 06:20:00
6 [报告]
发表于 2008-03-28 13:25 |只看该作者
遍历一遍不就行了吗?
“另:队列中的元素可以随意修改,但不能漏掉满足要求的情况”没搞懂........

论坛徽章:
0
7 [报告]
发表于 2008-03-28 13:27 |只看该作者
啥意思

论坛徽章:
0
8 [报告]
发表于 2008-03-28 13:40 |只看该作者
不明白。(1,2),(3,1),(4,5)怎么就连续了?
既然可以随便改,那就整个队列都可以改成连续的了吧。

论坛徽章:
0
9 [报告]
发表于 2008-03-28 13:40 |只看该作者

回复 #6 cjaizss 的帖子

恐怕不是那么简单吧,比如队列为{1,1},{2,1},{3,2},{3,1},{12,3},{4,1},{8,1}要找3个连续数有几种情况,就不好写遍历了

论坛徽章:
0
10 [报告]
发表于 2008-03-28 18:01 |只看该作者
这个是我做磁盘预读时的代码:其中第一个int代表磁盘偏移量,第二个int代表读取长度,如果找到有连续的数就说明要预读.没有就不管,因为本身是为了提高磁盘的读效率,所以这里的查找本身效率也要非常的高,我下面的算法就有缺陷,为了效率抛弃了一些满足要求的值,但是也没办法,所有想问问坛子里的各位兄弟有更好的想法没有~~~希望不吝赐教哈

  1. #include <iostream>
  2. using namespace std;

  3. typedef struct _ReadAheadInf
  4. {
  5.         int QuadPart;
  6.         int Length;
  7. }ReadAheadInf, *P_ReadAheadInf;

  8. const int ReadAheadInfArryNum=9;
  9. const int SeriesNum=3;

  10. ReadAheadInf pReadAheadInfArry[ReadAheadInfArryNum]={{1,1},{2,1},{3,2},{3,1},{12,3},{4,1},{8,1},{9,1},{11,1}};
  11. P_ReadAheadInf pReadAheadInfArryEdit=pReadAheadInfArry+8; //指向队列的尾巴
  12. int main(int argc, char *argv[])
  13. {       
  14.         int i=0,j=0,iCheckOk=1,len=0;
  15.         P_ReadAheadInf pTempBase=NULL;
  16.         P_ReadAheadInf pTempRun=NULL;

  17.         while(1)
  18.         {
  19.                 pTempBase=(pReadAheadInfArryEdit-SeriesNum<pReadAheadInfArry)?        \
  20.                         (pReadAheadInfArry+ReadAheadInfArryNum-(SeriesNum-(pReadAheadInfArryEdit-pReadAheadInfArry))):(pReadAheadInfArryEdit-SeriesNum);
  21.                 for(i=0;i<ReadAheadInfArryNum-SeriesNum+1;++i)
  22.                 {
  23.                         pTempRun=pTempBase+1;
  24.                         iCheckOk=1;
  25.                         len=pTempBase->Length;
  26.                         for(j=0;j<i+SeriesNum-1;++j)
  27.                         {
  28.                                 //判断越界
  29.                                 if(pTempRun-pReadAheadInfArry>=ReadAheadInfArryNum)
  30.                                         pTempRun=pReadAheadInfArry;
  31.                                 //判断连续
  32.                                 if(pTempBase->Length+pTempBase->QuadPart==pTempRun++->QuadPart)
  33.                                 {
  34.                                         pTempBase->Length+=(pTempRun-1)->Length;
  35.                                         if(++iCheckOk==SeriesNum)
  36.                                         {
  37.                                                 (pTempRun-1)->QuadPart=-1;//找到
  38.                                                 break;
  39.                                         }
  40.                                 }
  41.                         }
  42.                         pTempBase->Length=len;
  43.                         //判断越界
  44.                         if(--pTempBase<pReadAheadInfArry)
  45.                                 pTempBase=pReadAheadInfArry+ReadAheadInfArryNum-1;
  46.                 }
  47.         }
  48. }
复制代码
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP