给定一个数值,怎样可以求出这个数值落在一个区间上?

比如给680,区间是676-680,
给681,区间是681-685,
给682,区间是681-685
给687,区间是686-680

阅读 1.7k
avatarAI BotBETA

首先,你的最后一个区间似乎写错了,因为686-680不是一个有效的区间(结束值小于起始值)。我假设你想写的是686-690或者类似的其他有效区间。

下面是一个简单的算法,它接受一个数值和一系列区间,并返回该数值落在哪个区间内。这里我假设区间是连续且不重叠的,并且每个区间的起始值都小于或等于其结束值。

这个算法使用一个简单的线性搜索来遍历所有的区间,直到找到一个包含给定数值的区间。注意,这个算法的时间复杂度是O(n),其中n是区间的数量。如果区间数量很大,可能需要考虑使用更高效的搜索算法或数据结构,比如二分搜索树或平衡二叉搜索树。

以下是Python代码实现:

def find_interval(number, intervals):
    for interval in intervals:
        start, end = interval
        if start <= number <= end:
            return interval
    return None  # 如果找不到匹配的区间,返回None

# 示例区间
intervals = [(676, 680), (681, 685), (686, 690)]  # 我假设你最后一个区间是686-690

# 测试
print(find_interval(680, intervals))  # 输出: (676, 680)
print(find_interval(681, intervals))  # 输出: (681, 685)
print(find_interval(682, intervals))  # 输出: (681, 685)
print(find_interval(687, intervals))  # 输出: (686, 690)

请注意,这个算法假设区间列表是按升序排列的,即每个区间的起始值都大于或等于前一个区间的结束值。如果区间列表没有排序,那么你可能需要在搜索之前先对它们进行排序。

3 个回答
function check(num) {
    const tempNum = num % 5 || 5;
    return [num - tempNum + 1, num - tempNum + 5];
}

console.log(check(680));
console.log(check(681));
console.log(check(682));
console.log(check(687));
function getRange(n: number) {
    const max = Math.ceil(n / 5) * 5
    return [max - 4, max]
}

console.log(getRange(680)) // [676, 680]
console.log(getRange(681)) // [681, 685]
console.log(getRange(682)) // [681, 685]
console.log(getRange(687)) // [686, 690]
function getRange(num) {
    const span = 5;
    const start = Math.floor((num - 1) / span) * span + 1;
    const end = start + span - 1;
    return [start, end];
}

// 测试
console.log(getRange(680)); // 输出: [676, 680]
console.log(getRange(681)); // 输出: [681, 685]
console.log(getRange(682)); // 输出: [681, 685]
console.log(getRange(687)); // 输出: [686, 690]
撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题
宣传栏