📜  门| GATE-CS-2017(套装2)|问题 20(1)

📅  最后修改于: 2023-12-03 15:12:44.424000             🧑  作者: Mango

问题 20

给定一个数组 arr,数组中的元素都为正整数。定义“好数组”为数组中任意两个数之间的差值都在指定范围 k 以内。例如,对于数组 arr=[1, 2, 3, 4, 5]k=1,因为任意两个数之间的差值都不超过 1,所以 arr 是一个好数组。现在编写一个函数 good_array(arr, k),判断该数组是否为好数组。

输入格式
  • arr 数组的长度在区间 [1, 10^5] 中。

  • arr 数组中的元素在区间 [1, 10^9] 中。

  • k 在区间 [1, 10^9] 中。

输出格式
  • 如果 arr 是一个好数组,则返回 True

  • 否则,返回 False

示例

输入示例

good_array([1, 2, 3, 4, 5], 1)

输出示例

True
代码实现
def good_array(arr: List[int], k: int) -> bool:
    """
    判断数组是否为好数组
    
    :param arr: 待判断的数组
    :type arr: List[int]
    :param k: 差值范围
    :type k: int
    :return: 是否为好数组
    :rtype: bool
    """
    # 如果数组长度小于等于 1,那么肯定是好数组
    if len(arr) <= 1:
        return True
    
    # 对数组进行排序
    arr.sort()
    
    # 判断相邻两个数之间的差值是否都在指定范围内
    for i in range(len(arr)-1):
        if arr[i+1] - arr[i] > k:
            return False
    
    return True

该函数内部实现的思路是对数组进行排序,遍历数组中的相邻两个数,并判断它们之间的差值是否都在指定范围内。最后返回 TrueFalse

该函数的时间复杂度为 O(nlogn),其中 n 是数组的长度。因为该函数要对数组进行排序,所以需要消耗 O(nlogn) 的时间;遍历数组的时间复杂度为 O(n)。因此,总的时间复杂度为 O(nlogn)

该函数的空间复杂度为 O(1),因为只使用了常数级别的辅助空间来存放变量。