用于查找范围重叠的更节省内存的算法
More memory efficient algorithm for finding overlap in ranges
在这个问题中,答案包括一种算法,用于查找给定范围内范围列表的重叠。但是在我的情况下,我有一个n
整数的列表,当它们分组成n^2
对时形成范围。例如,如果我们从整数数组中获取array[i]
和array[j]
,(array[i]-array[j],array[i]+array[j])
创建一个范围。但是为了实现建议的算法,解决方案具有O(n^2)
内存复杂性。可以进一步优化(在内存方面(吗?
例:我有一个更大的范围(l,r)
,我必须找到(l,r)
中有多少个整数至少位于范围列表中的任何一个。例如,给定的整数数组是 {1,2,3}
。所以所有可能的范围都是(2-1,1+2), (3-1,1+3), (3-2,3+2)
.假设(l,r)
是(2,7)
。那么既然(2,5)
至少存在于其中一个中4
这就是答案。
首先对数组进行排序(如果尚未排序(。然后请注意,唯一值得考虑的范围是那些 j == i-1
.
要了解为什么要考虑以下数组:
{2,3,5,8}
那么可能的范围是:
i=3 j=2 ==> (8-5,8+5) = (3,13)
i=3 j=1 ==> (8-3,8+3) = (5,11)
i=3 j=0 ==> (8-2,8+2) = (6,10)
i=2 j=1 ==> (5-3,5+3) = (2,8)
i=2 j=0 ==> (5-2,5+2) = (3,7)
i=1 j=0 ==> (3-2,3+2) = (1,5)
请注意,j < i-1
的范围始终是 j == i-1
的范围的严格子集,因此不需要考虑这些范围。因此,您只需要考虑 O(n( 范围。
相关文章:
- 将字符串存储在c++中的稳定内存中
- 我应该以字符形式存储数字以节省内存吗?
- C++ 11 通过在类声明中使用指针来节省内存
- 使用常量可以节省内存吗?
- 使用动态库节省内存
- 用于查找范围重叠的更节省内存的算法
- C++:按常用基数对整数进行分组以节省内存
- 通过使用位数组而不是 int 来节省字典的内存
- 如何对上传程序服务器进行速率限制以节省内存
- 使用“std::shared_ptr”时可有效节省内存/编程
- 为什么指针在需要创建指向变量的指针时节省内存
- C++ 块代码在函数完成之前节省内存
- 我是否需要在C++中显式删除数组以节省内存
- 缩小 std::vector 的大小以适应其实际数据以节省内存使用?vec.swap() 在 MSVC 中不起作用?
- 一次只实例化一组类中的一个类,以节省内存
- 静态方法节省内存?(非托管代码)
- 为什么c++仍然不使用vector的共享资源来节省内存
- 指针和重复周期 - 我正在尝试节省内存
- 当许多unordered_map<字符串、双>具有与键完全相同的字符串集时如何节省内存
- Qt 5 dds支持,节省内存和改善渲染