- iOS/Objective-C 元类和类别
- objective-c - -1001 错误,当 NSURLSession 通过 httpproxy 和/etc/hosts
- java - 使用网络类获取 url 地址
- ios - 推送通知中不播放声音
我一直在 hackerearth 实践中尝试这个问题,这需要完成以下工作。
问题
给定一个整数 n,它表示来自 {0,1,2,3,4,5......n-2,n-1} 的 n 个数字的序列
我们以 (L,R) 的形式提供 m 个范围,使得 (0<=L<=n-1)(0<=R<=n-1)
if(L <= R) (L,R) 表示来自上述序列的数字{L,L+1,L+2,L+3......R-1,R}
else (L,R) 表示数字{R,R+1,R+2,......n-2,n-1} & {0,1,2,3.... L-1,L}即数字环绕
例子
n = 5 ie {0,1,2,3,4}
(0,3) signifies {0,1,2,3}
(3,0) signifies {3,4,0}
(3,2) signifies {3,4,0,1,2}
现在我们必须从每个范围中选择一个(仅一个)数字而不重复任何选择。我们必须知道是否可以从每个(和每个)范围中选择一个数字而不重复。
示例测试用例
n = 5// numbers {0,1,2,3,4}
// ranges m in number //
0 0 ie {0}
1 2 ie {1,2}
2 3 ie {2,3}
4 4 ie {4}
4 0 ie {4,0}
Answer is "NO" it's not possible.
因为我们不能从范围 4 0 中选择任何数字,因为如果我们从中选择 4,我们将无法从范围 4 4 中选择,如果从中选择 0,我们将无法从 0 0 中选择
我的方法-
1) 它可以在 O(N*M) 中完成,使用递归检查每个范围内的所有选择可能性,并使用 HashMap 并排记录我们的选择。
2)我是按n或m顺序试的,即线性顺序。问题缺乏编辑解释。社论中只提到了一个代码,没有评论和解释。我无法获得通过所有测试用例并被接受的人的代码线性解决方案代码。
我无法理解代码中使用的逻辑/算法以及它为什么有效?
请提出任何线性方法及其背后的逻辑,因为问题有这些限制
1 <= N<= 10^9
1 <= M <= 10^5
0 <= L, R < N
我猜这需要线性或 nlogn 解吗??
社论中的代码也可以在这里看到http://ideone.com/5Xb6xw
警告 -- 查看代码后,我发现该代码可互换使用 n 和 m 所以我想提一下问题的输入格式。
输入格式
第一行包含测试用例 tc,后面是两个整数 N,M - 第一个表示地球上的国家数,第二个表示他女朋友给他的范围数。之后,接下来的 M 行将有两个整数来描述范围,X 和 Y。如果 (X <= Y),则范围涵盖国家 [X,X+1...Y],否则范围涵盖 [X,X+ 1,.... N-1,0,1..., Y].
输出格式
如果可以,打印“YES”,否则打印“NO”。
最佳答案
编辑解决方案有两个组成部分。
线性时间减少到普通间隔的问题
假设输入区间的数量小于 n。
第一个是将问题减少到间隔不环绕的问题,如下所示。给定一个区间 [L, R],如果 L ≤ R,则发出两个区间 [L, R] 和 [L + n, R + n];如果 L > R,发出 [L, R + n]。简化的简单方向表明,如果原始问题有解,则简化后的问题也有解。对于 L ≤ R 的 [L, R],分配一个数字 k,将 k 分配给 [L, R],将 k + n 分配给 [L + n, R + n]。对于 L > R 的 [L, R],分配 k, k + n 中属于 [L, R + n] 的那个。除了区间 [L, R] 和 [L + n, R + n] 分别对 k 和 k + n 进行双重赋值外,每个区间都有自己的剩余类 mod n,因此赋值不会冲突。
相反,使用Hall's marriage theorem 证明归约的硬方向(如果原始问题无解,则归约问题无解) .根据 Hall 的标准,对于某些 k,无法解决的原始问题具有一组 k 个输入区间,其并集的大小小于 k。我们首先争辩说存在这样一组输入区间,其并集是一个(循环)区间(假设不全是 0..n-1)。将并集分解为构成它的最大(循环)区间集。每个输入区间恰好包含在这些区间之一中。通过平均参数,一些最大(循环)间隔包含比其大小更多的输入间隔。我们通过将这个反例“提升”到减少的问题来完成。给定最大(循环)区间 [L*, R*],如果 L* ≤ R*,我们将其提升到普通区间 [L*, R*],如果 L* >,则提升到 [L*, R* + n] R*。对这个区间中包含的循环区间也做同样的事情。证明这个提升的反例满足霍尔准则是乏味但直接的,这意味着简化的问题无解。
普通区间的 O(m log m) 时间解
这是一种扫描线算法。按较低端点对间隔进行排序并按该顺序扫描它们。我们想象扫描线从下端点移动到下端点。维护与扫掠线相交且未分配编号的间隔集,按上端点排序。当扫描线即将移动时,将新旧位置之间的编号分配给集合中的区间,优先分配给上端点最低的区间。这个策略的正确性应该很清楚:可以分配一个数字但被传递的间隔至少有与分配的间隔一样多的选项(在超集的意义上),所以我们永远不会做出选择我们有理由感到遗憾。
关于arrays - 是否可以从每个给定的间隔中选择一个数字而不重复选择。线性时间的解决方案,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41934249/
我有一个 if 语句,如下所示 if (not(fullpath.lower().endswith(".pdf")) or not (fullpath.lower().endswith(tup
然而,在 PHP 中,可以: only appears if $foo is true. only appears if $foo is false. 在 Javascript 中,能否在一个脚
XML有很多好处。它既是机器可读的,也是人类可读的,它具有标准化的格式,并且用途广泛。 它也有一些缺点。它是冗长的,不是传输大量数据的非常有效的方法。 XML最有用的方面之一是模式语言。使用模式,您可
由于长期使用 SQL2000,我并没有真正深入了解公用表表达式。 我给出的答案here (#4025380)和 here (#4018793)违背了潮流,因为他们没有使用 CTE。 我很欣赏它们对于递
我有一个应用程序: void deleteObj(id){ MyObj obj = getObjById(id); if (obj == null) { throw n
我的代码如下。可能我以类似的方式多次使用它,即简单地说,我正在以这种方式管理 session 和事务: List users= null; try{ sess
在开发J2EE Web应用程序时,我通常会按以下方式组织我的包结构 com.jameselsey.. 控制器-控制器/操作转到此处 服务-事务服务类,由控制器调用 域-应用程序使用的我的域类/对象 D
这更多是出于好奇而不是任何重要问题,但我只是想知道 memmove 中的以下片段文档: Copying takes place as if an intermediate buffer were us
路径压缩涉及将根指定为路径上每个节点的新父节点——这可能会降低根的等级,并可能降低路径上所有节点的等级。有办法解决这个问题吗?有必要处理这个吗?或者,也许可以将等级视为树高的上限而不是确切的高度? 谢
我有两个类,A 和 B。A 是 B 的父类,我有一个函数接收指向 A 类型类的指针,检查它是否也是 B 类型,如果是将调用另一个函数,该函数接受一个指向类型 B 的类的指针。当函数调用另一个函数时,我
有没有办法让 valgrind 使用多个处理器? 我正在使用 valgrind 的 callgrind 进行一些瓶颈分析,并注意到我的应用程序中的资源使用行为与在 valgrind/callgrind
假设我们要使用 ReaderT [(a,b)]超过 Maybe monad,然后我们想在列表中进行查找。 现在,一个简单且不常见的方法是: 第一种可能性 find a = ReaderT (looku
我的代码似乎有问题。我需要说的是: if ( $('html').attr('lang').val() == 'fr-FR' ) { // do this } else { // do
根据this文章(2018 年 4 月)AKS 在可用性集中运行时能够跨故障域智能放置 Pod,但尚不考虑更新域。很快就会使用更新域将 Pod 放入 AKS 中吗? 最佳答案 当您设置集群时,它已经自
course | section | type comart2 : bsit201 : lec comart2 :
我正在开发自己的 SDK,而这又依赖于某些第 3 方 SDK。例如 - OkHttp。 我应该将 OkHttp 添加到我的 build.gradle 中,还是让我的 SDK 用户包含它?在这种情况下,
随着 Rust 越来越充实,我对它的兴趣开始激起。我喜欢它支持代数数据类型,尤其是那些匹配的事实,但是对其他功能习语有什么想法吗? 例如标准库中是否有标准过滤器/映射/归约函数的集合,更重要的是,您能
关闭。这个问题不符合Stack Overflow guidelines .它目前不接受答案。 这个问题似乎与 help center 中定义的范围内的编程无关。 . 关闭 9 年前。 Improve
我一直在研究 PHP 中的对象。我见过的所有示例甚至在它们自己的对象上都使用了对象构造函数。 PHP 会强制您这样做吗?如果是,为什么? 例如: firstname = $firstname;
...比关联数组? 关联数组会占用更多内存吗? $arr = array(1, 1, 1); $arr[10] = 1; $arr[] = 1; // <- index is 11; does the
我是一名优秀的程序员,十分优秀!