【发布时间】:2021-08-24 20:50:20
【问题描述】:
我面临以下问题的挑战:我需要编写一个程序,将n 间隔[a,b] 和m 对(k,d) 作为输入。对于每个(k,d) 对,程序应输出第k 个最短区间的长度(其中区间的长度定义为b - a + 1),其中a <= d <= b。如果d 不在任何区间内,或者d 在小于k 区间内,则程序应输出-1。
输入/输出示例:
第一个整数 (5) 代表n。接下来的n 行包含间隔(如 [2..4]、[2..6] 等)。下面是整数m (3),后面是m 成对行(k,d)。
我正在寻找一种能尽快解决这个问题的算法。
【问题讨论】:
-
您谈论的是
n间隔和m对,但没有描述输入的组织方式。例如,n是文件中的第一个数字吗?这后面是n间隔[我们每个读到两个数字]?然后,我们会读取数字m然后m对[每个两个数字]?或者,是n和m文件中的前两个数字[分别]。所需输出的描述是什么。您显示了输出,但没有描述(例如)3、18和-1代表[确切] 基于文件数据,我 猜 @987654356 @ 是5和m是3? -
@EugeneSh。对不起,我忘了提。我正在寻找一种算法来在尽可能小的时间复杂度内解决这个问题。
-
@CraigEstey 我确实不清楚输入和关于,谢谢你提到它。我已经更新了这个问题。您对输入的假设是正确的。输出是包含 d 的第 k 个最小区间的长度。
-
欢迎来到 Stack Overflow。请阅读About 和How to Ask 页面。我们将通过诚实尝试解决任务来帮助您解决问题,但我们通常不会为您编写代码。请注意,您应该展示您尝试过的代码并解释您遇到的问题。它应该是 MCVE(Minimal, Complete, Verifiable Example — 或 MRE 或 SO 现在使用的任何名称)或 SSCCE(Short, Self-Contained, Correct Example) — 相同的想法但名称不同。
-
你说:“最短间隔”。但是,对于
[2,8]对,它匹配间隔[8,16]和2,19]第一个长度为 9,第二个长度为 19(您使用的是(b - a) + 1[包括在内])。因此,在您的示例输出中, 18 是“一对一” [来自 19]。 最短匹配间隔是[8,16],长度为9。因此,除非我遗漏了什么,否则所需的输出无法与输入匹配。
标签: c algorithm data-structures intervals