18.5 有个内含单词的超大文本文件,给定任意两个单词,找出在这个文件中这两个单词的最短距离(也即相隔几个单词)。有办法在O(1)时间里完成搜索操作吗?解法的空间复杂度如何?

解法1:我们假设单词word1和word2谁在前谁在后无关紧要。要解决此题,我们需要遍历一次这个文件。在遍历期间,我们会记下最后看见word1和word2的地方,并把它们的位置存入lastPosWord1和lastPosWord2中。碰到word1时,就拿他跟lastPosWord2比较,如有必要则更新min,然后更新lastPosWord1.每碰到word2时,我们也执行同样的操作。遍历结束后,就可以得到最短距离。

实现算法:

int ShortestDist(string text[], int n, string word1, string word2){int min = kMaxInt / 2;int pos1 = -min;int pos2 = -min;for(int pos=0; pos<n; ++pos){if(text[pos] == word1){pos1 = pos;int dist = pos1 - pos2;if(dist < min)min = dist;}else if(text[pos] == word2){pos2 = pos;int dist = pos2 - pos1;if(dist < min)min = dist;}}return min;
}

如果上述代码要重复调用(查询其他单词对的最短距离),可以构造一个散列表,记录每个单词及其出现的位置。然后,我们只需找到listA和listB中(算术)差值最小的那两个值。

hash_map<string,vector<int> > listA;

hash_map<string,vector<int> > listB;

listA:{1,2,9,15,25}

listB:{4,10,19}

careercup-高等难度 18.5相关推荐

  1. careercup-高等难度 18.9

    18.9 随机生成一些数字并传入某个方法.编写一个程序,每当收到新字符数字时,找出并记录中位数. 类似:设计一个数据结构,包括两个函数,插入数据和获得中位数 解法: 一种解法是使用两个优先级堆:一个大 ...

  2. careercup-高等难度 18.6

    18.6 设计一个算法,给定10亿个数字,找出最小的100万个数字.假定计算机内存足以容纳全部10亿个数字. 解法: 方法1:排序 按升序排序所有的元素,然后取出前100万个数,时间复杂度为O(nlo ...

  3. 小学数学开灯问题_小学一年级数学题库:开灯问题(高等难度)

    新东方小学生资料下载 姓名 手机号 短信验证码 图片验证码 年级 请选择 学前 一年级 二年级 三年级 四年级 五年级 六年级 行政区 请选择 请选择 请选择 {"name":{& ...

  4. 2016华为软件精英挑战赛:赛题及其答疑汇总

    注:本文文字均摘自官方指定网站和论坛,权威且可信,答疑见中间部分,非常全,众玩家可放心阅读. 同时文末给出了包括自己在内的诸多玩家的解法. 前言 赛题源自"未来网络"业务发放中的路 ...

  5. MySQL基础 练习题2

    1. 查询 students 表中的所有记录的 sname.ssex 和 class 列. 2. 查询教师所有的单位即不重复的 depart 列. 3. 查询 students 表的所有记录. 4. ...

  6. 语义分割--Not All Pixels Are Equal:Difficulty-Aware Semantic Segmentation via Deep Layer Cascade

    Not All Pixels Are Equal: Difficulty-Aware Semantic Segmentation via Deep Layer Cascade CVPR2017 本文针 ...

  7. 你面试稳了!通关LeetCode刷题完整攻略,省时又高效

    关注上方"深度学习技术前沿",选择"星标公众号", 资源干货,第一时间送达! 作者:穷码农 来源:https://zhuanlan.zhihu.com/p/10 ...

  8. 零基础学python电子书-零基础入门学习Python epub高清电子书

    作者: 小甲鱼 出版社: 清华大学出版社 出版年: 2016-11-1 下载地址(回复可见) 此处内容需要评论回复后 内容简介 本书提倡理解为主,应用为王.因此,只要有可能,小甲鱼(注:作者)都会通过 ...

  9. 201571030130/201571030124《小学四则运算练习软件软件需求说明》结对项目报告

    需求调查的分析说明: 1.首先:我们的需求分析通过工具墨刀构建出上一个实验中我们设计的软件原型(因为我们上一次的实验的图形用户界面无法让用户切实体验,故利用墨刀原型工具进行我们关于软件想法的还原),并 ...

最新文章

  1. 算法及其复杂度度量简介
  2. C语言指针数组和数组指针
  3. (四)Java B2B2C o2o多用户商城 springcloud架构-断路器(Hystrix)
  4. springboot 使用idea打包 遇到问题
  5. 牛客网(剑指offer) 第十七题 树的子结构
  6. No module named yum错误的解决办法
  7. 张勇云栖大会谈科技担当与责任:做开放共享人人受益的好科技
  8. LinkedList源码学习
  9. 权限管理系统如何分别实现对用户和角色的授权
  10. 题解 P3978 【[TJOI2015]概率论】
  11. APK安装过程及原理详解
  12. linux_grep操作
  13. Java数组、集合、散列表常见算法浅析
  14. mysql子查询语句多列_MySQL:子查询
  15. 法国老医生和他“驱动”的摄像头们
  16. Ubuntu安装多用户免密登录Jupyterhub
  17. 基于egret的小游戏——拼图
  18. 网络命令——traceroute、tracert(windows)
  19. delphi 验证码图片
  20. 进军NFT?方文山×周杰伦联名款公仔今日发售,将引入NFT防伪认证!

热门文章

  1. 【数道云大数据】大数据平台哪一个好用?武汉2019年大数据平台排行版?...
  2. vue中引入第三方字体图标库iconfont,及iconfont引入彩色图标
  3. 第五次毕业设计任务书
  4. 数据存储之属性列表Plist
  5. github中origin和upstream的区别(转)
  6. TensorFlow ImportError: (‘Failed to import pydot. You must `pip install pydot`)
  7. 设备中的c语言代码文件,设备树编译器无法识别包含文件的C语法
  8. adobe premiere elements 2019中文版
  9. photoshop(ps) cs6中文版
  10. 洛谷 P1034 矩形覆盖