檢查數組中的數字是否連續,你還有其他方案?

簡述

給定一個未排序的數字數組,編寫一個函數,如果該數組包含連續的數字,則該函數返回true。

  • a)如果array爲{5,2,3,1,4},則該函數應返回true,因爲該數組具有從1到5的連續數字。
  • b)如果數組是{83,78,80,81,79,82},則該函數應返回true,因爲數組具有從78到83的連續數字。
  • c)如果數組爲{34,23,52,12,3},則該函數應返回false,因爲元素不連續。

排序方式

通過排序後,校驗數據之間相差是否是1。

def are_consecutive_sort(numbers):
    list.sort(numbers)
    for n in range(0, len(numbers) - 1):
        if numbers[n] + 1 != numbers[n + 1]:
            return False
    return True

時間複雜度 O(nLogn)(線性對數) 空間複雜度 O(n)

使用列表訪問方式

1.判斷數據中最大值,最小值,統計數據的個數。
2.使用列表判斷重複數據。

def are_consecutive_visited_array(numbers):
    Min = min(numbers)
    Max = max(numbers)
    if Max - Min != len(numbers) - 1:
        return False
    visited = []
    for i in range(0, len(numbers) - 1):
        if i in visited:
            return False
        visited.append(i)
    return True

時間複雜度 O(n) 線性 空間複雜度 O(n)

總結

上面兩種方案,顯然是第二種方式,屬於更加優秀的解決方案。你還有其它方式沒?

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章