程序员面试金典 - 面试题 17.11. 单词距离(multimap平衡二叉搜索树)

1. 题目

有个内含单词的超大文本文件,给定任意两个单词,找出在这个文件中这两个单词的最短距离(相隔单词数)。
如果寻找过程在这个文件中会重复多次,而每次寻找的单词不同,你能对此优化吗?

示例:
输入:words = ["I","am","a","student","from","a","university","in","a","city"],
word1 = "a", word2 = "student"
输出:1提示:
words.length <= 100000

来源:力扣(LeetCode) 链接:https://leetcode-cn.com/problems/find-closest-lcci
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。

2. 解题

类似题目:

LeetCode 243. 最短单词距离
LeetCode 244. 最短单词距离 II(哈希map+set二分查找)
LeetCode 245. 最短单词距离 III

  • 如果多次查询,建立multimap,查找 log⁡n\log nlogn 复杂度
  • 用multimap(底层是红黑树,平衡二叉搜索树)
  • key 是单词,value 是 序号
  • 该结构有序
class Solution {multimap<string,int> m;
public:int findClosest(vector<string>& words, string word1, string word2) {for(int i = 0; i < words.size(); ++i)m.insert(make_pair(words[i],i));auto it1 = m.lower_bound(word1), end1 = m.upper_bound(word1);auto it2 = m.lower_bound(word2), end2 = m.upper_bound(word2);int dis = INT_MAX;while(it1 != end1 || it2 != end2){while(it1 != end1 && it2 != end2 && it1->second < it2->second)dis = min(dis, it2->second - it1++->second);while(it1 != end1 && it2 != end2 && it2->second < it1->second)dis = min(dis, it1->second - it2++->second);if(it1 == end1 && it2 != end2){it1--;while(it2 != end2){dis = min(dis, abs(it1->second - it2++->second));}it1++;}else if(it1 != end1 && it2 == end2){it2--;while(it1 != end1){dis = min(dis, abs(it2->second - it1++->second));}it2++;}}return dis;}
};

在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/477329.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

腾讯薪酬改革来了!晋升≠加薪?员工到底为何工作?

文 | 天于刀刀这届打工人真的是太太太难了&#xff01;朝九晚九地写PPT&#xff0c;熬KPI&#xff0c;疫情它来了&#xff1b;终于习惯了隔离核酸&#xff0c;走出EMO&#xff0c;隔壁工位的同学被毕业了&#xff1b;最终凭着玄学幸运留组&#xff0c;还没来得及准备庆祝一下六…

Spring Boot和Feign中使用Java 8时间日期API(LocalDate等)的序列化问题

LocalDate、LocalTime、LocalDateTime是Java 8开始提供的时间日期API&#xff0c;主要用来优化Java 8以前对于时间日期的处理操作。然而&#xff0c;我们在使用Spring Boot或使用Spring Cloud Feign的时候&#xff0c;往往会发现使用请求参数或返回结果中有LocalDate、LocalTim…

LeetCode 1054. 距离相等的条形码(优先队列)

1. 题目 在一个仓库里&#xff0c;有一排条形码&#xff0c;其中第 i 个条形码为 barcodes[i]。 请你重新排列这些条形码&#xff0c;使其中两个相邻的条形码 不能 相等。 你可以返回任何满足该要求的答案&#xff0c;此题保证存在答案。 示例 1&#xff1a; 输入&#xff1a…

Meta AI团队大换血!组织拆散,高管离职,LeCun进军元宇宙??

编 | 桃子 时光源 | 新智元【导读】全力助攻元宇宙&#xff0c;Meta人工智能部门要重组了&#xff01;今天&#xff0c;Yann LeCun发文表示&#xff0c;Meta的人工智能实验室FAIR将整合到Reality Labs中。另外&#xff0c;任职4年的人工智能高管Jerome Pesenti也宣布了将要离职…

【译】Spring Boot 2.0 官方迁移指南

前提 希望本文档将帮助您把应用程序迁移到 Spring Boot 2.0。 在你开始之前 首先&#xff0c;Spring Boot 2.0 需要 Java 8 或更高版本。不再支持 Java 6 和 7 了。 在 Spring Boot 2.0 中&#xff0c;许多配置属性被重新命名/删除&#xff0c;开发人员需要更新application…

剑指Offer - 面试题22. 链表中倒数第k个节点(快慢指针)

1. 题目 输入一个链表&#xff0c;输出该链表中倒数第k个节点。为了符合大多数人的习惯&#xff0c;本题从1开始计数&#xff0c;即链表的尾节点是倒数第1个节点。例如&#xff0c;一个链表有6个节点&#xff0c;从头节点开始&#xff0c;它们的值依次是1、2、3、4、5、6。这个…

AI正在改变制造业!快递单信息抽取、智能物流仓案例盘点

大家好&#xff0c;我是卖萌酱。制造业作为国民经济主体&#xff0c;是国家创造力、竞争力和综合国力的重要体现。作为制造强国建设的主攻方向&#xff0c;智能制造发展水平关乎我国未来制造业的全球地位。制造业与物流结合紧密&#xff0c;随着制造业的高速发展&#xff0c;对…

Spring Boot 2.0 新特性(二):新增事件ApplicationStartedEvent

今天继续来聊Spring Boot 2.0的新特性。本文将具体说说2.0版本中的事件模型&#xff0c;尤其是新增的事件&#xff1a;ApplicationStartedEvent。 在Spring Boot 2.0中对事件模型做了一些增强&#xff0c;主要就是增加了ApplicationStartedEvent事件&#xff0c;所以在2.0版本中…

剑指Offer - 面试题57. 和为s的两个数字(双指针)

1. 题目 输入一个递增排序的数组和一个数字s&#xff0c;在数组中查找两个数&#xff0c;使得它们的和正好是s。如果有多对数字的和等于s&#xff0c;则输出任意一对即可。 示例 1&#xff1a; 输入&#xff1a;nums [2,7,11,15], target 9 输出&#xff1a;[2,7] 或者 [7,…

爷青结!吴恩达十年《机器学习》课程关闭注册!网友:一个时代的终结

文 | 杜伟、陈萍源 | 机器之心俗语说&#xff0c;旧的不去新的不来。也许新课程又会成为新的经典呢。要说人工智能领域的课程&#xff0c;斯坦福大学客座教授吴恩达的《机器学习》&#xff08;Machine Learning&#xff09;堪称经典。该课程最开始于 2012 年在 Coursera 上线&a…

Spring Boot 2.0 新特性(一):配置绑定 2.0 全解析

在Spring Boot 2.0中推出了Relaxed Binding 2.0&#xff0c;对原有的属性绑定功能做了非常多的改进以帮助我们更容易的在Spring应用中加载和读取配置信息。下面本文就来说说Spring Boot 2.0中对配置的改进。 配置文件绑定 简单类型 在Spring Boot 2.0中对配置属性加载的时候会…

剑指Offer - 面试题57 - II. 和为s的连续正数序列(滑动窗口)

1. 题目 输入一个正整数 target &#xff0c;输出所有和为 target 的连续正整数序列&#xff08;至少含有两个数&#xff09;。 序列内的数字由小到大排列&#xff0c;不同序列按照首个数字从小到大排列。 示例 1&#xff1a; 输入&#xff1a;target 9 输出&#xff1a;[[…

博士读一半,导师跳槽了!博士生把亲身经历发在了Science上

源 | 微算云平台、知乎有这样一个迫在眉睫的问题&#xff0c;困扰着博士生&#xff1a;导师要跳槽&#xff0c;自己该怎么办&#xff1f;▲图源&#xff1a;知乎同样的&#xff0c;Jessica Toothaker 是匹兹堡大学医学院的一名博士生&#xff0c;也是耶鲁大学的访问学生。在她读…

Spring Boot 2.0正式发布,升还是不升呢?

Spring帝国 Spring几乎是每一位Java开发人员都耳熟能详的开发框架&#xff0c;不论您是一名初出茅庐的程序员还是经验丰富的老司机&#xff0c;都会对其有一定的了解或使用经验。在现代企业级应用架构中&#xff0c;Spring技术栈几乎成为了Java语言的代名词&#xff0c;那么Sp…

剑指Offer - 面试题66. 构建乘积数组(正反遍历)

1. 题目 给定一个数组 A[0,1,…,n-1]&#xff0c;请构建一个数组 B[0,1,…,n-1]&#xff0c;其中 B 中的元素 B[i]A[0]A[1]…A[i-1]A[i1]…A[n-1]。不能使用除法。 示例: 输入: [1,2,3,4,5] 输出: [120,60,40,30,24]提示&#xff1a; 所有元素乘积之和不会溢出 32 位整数 a.l…

Spring Boot 2.0与Java 9

Java 9发布至今已经有半年之久&#xff0c;Spring Boot对其的支持进度也快接近完成&#xff0c;本文就来整理一下在Java 9上运行Spring Boot的一些要点。 必须使用Spring Boot2.0 在Spring Boot的版本计划中明确说明了2.0版本开始才对Java 9进行支持&#xff0c;而1.x版本暂时…

扩散模型在图像生成领域大火,风头超过GAN?

文 | Zhifeng源 | 知乎首先说说我的背景。我从20年diffusion model刚出来就开始&#xff08;花部分精力&#xff09;做这个问题&#xff0c;到目前已经有了3篇相关paper (DiffWave, FastDPM, PDR), 之后也会将其作为我的主要方向之一。我算是这一领域比较早期的研究者&#xff…

剑指Offer - 面试题50. 第一个只出现一次的字符(unordered_map)

1. 题目 在字符串 s 中找出第一个只出现一次的字符。如果没有&#xff0c;返回一个单空格。 示例: s "abaccdeff" 返回 "b"s "" 返回 " "限制&#xff1a; 0 < s 的长度 < 50000来源&#xff1a;力扣&#xff08;LeetCode&…

618大促将至,用AI挖掘差评,零代码实现亿级评论观点情感分析

文 | 卖萌酱马上就要到一年一度的618大促&#xff0c;卖萌酱在添加购物车时&#xff0c;选择困难症又犯了。如今的电商评论区&#xff0c;大量刷单行为淹没了重要的产品评价&#xff0c;有的被淹没在了追评区&#xff0c;有的甚至已经不分好评/中评/差评区了&#xff0c;而是“…

Spring Boot 2.0 新特性和发展方向

以Java 8 为基准 Spring Boot 2.0 要求Java 版本必须8以上&#xff0c; Java 6 和 7 不再支持。 内嵌容器包结构调整 为了支持reactive使用场景&#xff0c;内嵌的容器包结构被重构了的幅度有点大。EmbeddedServletContainer被重命名为WebServer&#xff0c;并且org.springf…