algorithm - 查找两个整数区间之间的差集

标签 algorithm

我最近遇到了一个问题。我必须找到两个整数区间之间的差值。间隔由两个边界决定 - 高和低。不包括高点的地方。

好吧,我想出了解决方案,要考虑几种情况。一下子就变成了 12 例。我在下面列出了其中一些。看起来很奇怪。有更简单的解决方案吗?

        //a[  a) b[  b) 
        // [   )  
        if (a._end <= b._start)
            return Lst(a);

        //a[  b[  a)  b)
        // [   )
        if (a._start < b._start && b._start < a._end &&
            b._start < a._end && a._end < b._end)
            return Lst(Rng(a.Start(), b.Start()));

        //b[  a[  b)  a)
        //         [   )
        if (b._start < a._start && a._start < b._end &&
            a._start < b._end && b._end < a._end)
            return Lst(Rng(b.End(), a.End()));

        //b[  b) a[  a)  
        //        [   )
        if (b._end <= a._start)
            return Lst(a);

        //a[  b[  b)  a)
        // [   )   [   )
        if (a._start < b._start && b._start < a._end &&
            a._start < b._end && b._end < a._end)
            return Lst(
                Rng(a.Start(), b.Start()),
                Rng(b.End(), a.End()));

最佳答案

(我不明白你为什么决定生成像 ... b._start < a._end && b._start < a._end ... 这样的冗余条件)

除其他事项外,由于您尝试在单个 return 语句中构建整个结果,因此您的代码变得更加复杂。如果您可以在局部变量中增量构建结果,然后返回该局部变量,代码将大大简化。

依赖标准函数,如 minmax而不是嵌入 min/max代码中的逻辑也会使其更加紧凑。

假设我们在本地列表变量 result 中构建结果并通过执行 result.append() 向其附加间隔.

差异操作最多可以产生两个区间:一个在b 的左边。 , 另一个在 b 的右边.让我们按顺序计算它们

List result;

if (a._start < b._start)
  // Left portion exists
  result.append(Rng(a._start, min(a._end, b_start)));

if (a._end > b._end)
  // Right portion exists
  result.append(Rng(max(a._start, b._end), a._end));
  
return result;

我假设间隔已经标准化,即 a._start <= a._end ,但您的代码似乎也依赖于该假设。

关于algorithm - 查找两个整数区间之间的差集,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26338524/

相关文章:

java - Neo4j 中的 Dijkstra 变体 - 查找所有路径

c# - 在C#中合并非重叠多边形的简单算法

c++ - 寻找 8x8(或 nxn)离散余弦变换 (DCT)/IDCT 伪代码

javascript - 使用 ng-repeat、ng-model 和复选框获取数组中的位置

python - 在python中使用未指定的加密 key 解码加密文本

python - 从向量中有效提取边列表的算法

algorithm - Prolog迷宫求解算法

java - 在数组中生成随机数

algorithm - 是否有可能从 n 个未排序的整数中找到时间复杂度 O(n) 和空间复杂度 O(k) 的 k 个最大数?

python - 如何用python提高置换算法效率