当前位置:  开发笔记 > 编程语言 > 正文

查找数字范围交叉点

如何解决《查找数字范围交叉点》经验,为你挑选了2个好方法。

找出两个数字范围是否相交的最佳方法是什么?

我的号码范围是3023-7430,现在我想测试以下哪个数字范围与它相交:<3000,3000-6000,6000-8000,8000-10000,> 10000.答案应该是3000-60006000-8000.

在任何编程语言中执行此操作的好的,有效的数学方法是什么?



1> Chris Kimpto..:

只是一个伪代码猜测:

Set determineIntersectedRanges(Range range, Set setofRangesToTest)
{
  Set results;
  foreach (rangeToTest in setofRangesToTest)
  do
    if (rangeToTest.end range.end) continue; // skip this one, its above our range
    results.add(rangeToTest);
  done
  return results;
}



2> Hans-Peter S..:

我会创建一个Range类,并给它一个方法boolean intersects(Range).然后你可以做一个

foreach(Range r : rangeset) { if (range.intersects(r)) res.add(r) }

或者,如果您使用一些Java 8风格的函数式编程以明确:

rangeset.stream().filter(range::intersects).collect(Collectors.toSet())

交叉路口本身就像

this.start <= other.end && this.end >= other.start

推荐阅读
农大军乐团_697
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有