📌  相关文章
📜  检查数组是否是从1到N的数字排列(1)

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

检查数组是否是从1到N的数字排列

如果你需要检查一个数组是否是从1到N的数字排列,你可以通过以下几种方法实现:

方法一:排序后比较
  • 将数组排序;
  • 依次检查每个元素是否和其下标相同(注意数组下标从0开始);
  • 若全部相同,则为从1到N的数字排列;否则不是。
def is_num_sequence(arr):
    arr.sort()
    for i in range(len(arr)):
        if arr[i] != i + 1:
            return False
    return True
方法二:使用哈希表
  • 遍历数组,将每个元素添加到哈希表中;
  • 再从1到N检查哈希表中是否存在相应的键值,若存在则删除该键值;
  • 若最终哈希表为空,则为从1到N的数字排列;否则不是。
def is_num_sequence(arr):
    hash_dict = {}
    for num in arr:
        hash_dict[num] = 1
    for i in range(1, len(arr)+1):
        if i not in hash_dict:
            return False
        del hash_dict[i]
    if len(hash_dict) == 0:
        return True
    else:
        return False
方法三:直接遍历
  • 检查数组长度是否等于N;
  • 检查数组中是否存在重复元素;
  • 检查数组中的元素是否都是从1到N的数字。
def is_num_sequence(arr):
    n = len(arr)
    if n != len(set(arr)):
        return False
    for i in range(n):
        if arr[i] <= 0 or arr[i] > n:
            return False
    return True

以上三种方法可以实现数组从1到N的数字排列的检查,根据具体情况选择合适的方法即可。