📅  最后修改于: 2023-12-03 15:12:44.424000             🧑  作者: Mango
给定一个数组 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
该函数内部实现的思路是对数组进行排序,遍历数组中的相邻两个数,并判断它们之间的差值是否都在指定范围内。最后返回 True
或 False
。
该函数的时间复杂度为 O(nlogn)
,其中 n
是数组的长度。因为该函数要对数组进行排序,所以需要消耗 O(nlogn)
的时间;遍历数组的时间复杂度为 O(n)
。因此,总的时间复杂度为 O(nlogn)
。
该函数的空间复杂度为 O(1)
,因为只使用了常数级别的辅助空间来存放变量。