|
|
1
1
参考@Bohemian的想法,将方法从“add all element then remove by range”更改为“add element outofremove range”
对移动的范围进行排序后,两个范围之间的关系为
对于情况1,忽略第二个范围。对于情况2,将边界线更新到第二个范围的末尾。对于情况3,将间隙添加到元素列表,并将边框更新到第二个范围的末尾。 上面的代码试图比较虚拟范围(outer.start-1,borderElementIndex)和rangesToBeRemoved(sorted)中的所有范围 重复使用示例:{(2,7),(4,6),(6,8)}。
为了进一步减少空间使用,可以在@Danny_ds解决方案中使用相同的idea状态来存储元素的范围,而不是单个元素。 |
|
|
2
1
我的想法是坚持索引而不是项目值。这样做的好处是排除一个范围是O(1)的操作,因为不必遍历数组的每一项,我们只需要更改一个索引值。 之后,我们应该遍历数组索引来编译答案(有关如何构造结果的详细信息,请参见printRange方法)。 O(n)+O(m) 哪里 n个 米 是要排除的范围数。就内存而言,使用该解决方案是O(n),因为我们需要使用额外的数组来存储n个大小的索引。 已排序 按范围。起始值。如果他们没有分类,它补充说 算法的复杂性。
|
|
|
3
1
然后,您可以保持相同的代码,但它变为O(n)而不是O(n2),因为所有间隔都是不相交的,每个元素最多出现在一个输入间隔中 作为第二个改进,您可以检查当前值是否在某个间隔的左边,如果是,请跳过该间隔:
|
|
|
4
1
对范围排序,然后在外部范围上使用循环输出,跳过范围 ),下面是一种额外的方法:
这可以在不排序范围的情况下完成,但是每次我们都必须在结果列表中查找位置。 这两个解决方案在大范围内都表现良好(如果它们返回一个范围列表,而不是一个包含所有值的列表)。
使用空间极小,执行迅速。将上述范围与使用
|
|
5
1
我不知道这个问题的复杂性,但认为使用Java-8:
|
|
|
6
1
它也不使用任何类,应该工作得很快。 很高兴听到大家的评论。
|
|
|
user29759326 · 如何返回递归函数中的最后一个值? 1 年前 |
|
|
malife89 · 将java中的字符串读取为正确的日期格式 1 年前 |
|
|
Tim · 在java中,有没有更快的方法将字节数组写入文件? 1 年前 |
|
|
rudraraj · java中未声明最终变量 1 年前 |
|
|
Bala Ji · 以下BFS的实施效率如何? 1 年前 |