文字配列にすべての文字が一度しか現れていないかどうかを判断する
24764 ワード
文書ディレクトリは、文字配列中のすべての文字が1回だけ現れるかどうかを判断する である.文字が一意かどうかを判断する 時間複雑度O(N)アルゴリズム構想 対応コード 空間複雑度O(1)アルゴリズム構想 対応コード 文字配列にすべての文字が一度しか現れていないかどうかを判断する
文字が一意かどうかを判断する
【タイトル】1つの文字タイプ配列chas[]を与え、chasにすべての文字が1回しか現れていないかどうかを判断します.
【例】chas=[‘a’,‘b’,‘c’]、Trueを返す.chas=[‘1’,‘2’,‘1’]でFalseを返します.
【要求】以下の2つの異なる要求によってそれぞれ実現する時間複雑度O(N)を実現する方法. 余分なスペースの複雑さをO(1)に保証する前提の下で、時間の複雑さをできるだけ低くする方法を実現してください. 時間複雑度O(N)アルゴリズムの考え方
辞書/集合/リスト統計では,再統計は繰返しであり,そうでなければ文字の一意時間複雑度はO(N)O(N)O(N),空間複雑度はO(N)O(N)O(N)O(N)であることが分かった.
対応するコード
空間複雑度O(1)アルゴリズムの考え方
まず並べ替えて、隣の文字が同じかどうかを確認します.同じものがあれば繰り返しです.そうしないと、文字は唯一並べ替え、バブル並べ替え、挿入並べ替え、時間複雑度O(N^2)、空間複雑度O(1)、条件を満たすスタック並べ替え、時間複雑度O(Nlogn)、空間複雑度O(1)、条件を満たす高速並べ替え、時間複雑度O(Nlogn)、空間複雑度は最低O(logN)集計ソート、時間複雑度O(NlogN)であり、補助配列が必要であり、空間複雑度はO(N)バケツソート、基数ソート、カウントソートなどの非比較ソートであり、時間複雑度はO(N)であるが、データの状況に関係する余分な空間が必要であるため、条件を満たさない
従って、最適化は、時間的複雑度O(N l o g N)O(NlogN)O(NlogN)、空間的複雑度O(1)O(1)O(1)O(1)O(1)O(1)O(1)O(1)O(1)O(1)O(1)O(1)O(1)O(1)O(1)O
対応するコード
何か質問やアドバイスがあれば、コメントエリアでコメントや指摘を歓迎します.
時間と労力を費やしてくれてありがとう!
文字が一意かどうかを判断する
【タイトル】1つの文字タイプ配列chas[]を与え、chasにすべての文字が1回しか現れていないかどうかを判断します.
【例】chas=[‘a’,‘b’,‘c’]、Trueを返す.chas=[‘1’,‘2’,‘1’]でFalseを返します.
【要求】以下の2つの異なる要求によってそれぞれ実現する
辞書/集合/リスト統計では,再統計は繰返しであり,そうでなければ文字の一意時間複雑度はO(N)O(N)O(N),空間複雑度はO(N)O(N)O(N)O(N)であることが分かった.
対応するコード
# , O(N), O(N)
def is_unique_time_first(arr):
d = {}
for i in range(len(arr)):
if arr[i] in d:
return False
else:
d[arr[i]] = 1
return True
#
if __name__ == '__main__':
chas = ['a', 'b', 'c']
print(is_unique_time_first(chas)) # True
chas = ['1', '2', '1']
print(is_unique_time_first(chas)) # False
空間複雑度O(1)アルゴリズムの考え方
まず並べ替えて、隣の文字が同じかどうかを確認します.同じものがあれば繰り返しです.そうしないと、文字は唯一並べ替え、バブル並べ替え、挿入並べ替え、時間複雑度O(N^2)、空間複雑度O(1)、条件を満たすスタック並べ替え、時間複雑度O(Nlogn)、空間複雑度O(1)、条件を満たす高速並べ替え、時間複雑度O(Nlogn)、空間複雑度は最低O(logN)集計ソート、時間複雑度O(NlogN)であり、補助配列が必要であり、空間複雑度はO(N)バケツソート、基数ソート、カウントソートなどの非比較ソートであり、時間複雑度はO(N)であるが、データの状況に関係する余分な空間が必要であるため、条件を満たさない
従って、最適化は、時間的複雑度O(N l o g N)O(NlogN)O(NlogN)、空間的複雑度O(1)O(1)O(1)O(1)O(1)O(1)O(1)O(1)O(1)O(1)O(1)O(1)O(1)O(1)O(1)O
対応するコード
# , O(1), O(NlogN)
def is_unique_space_first(arr):
heap_sort(arr)
for i in range(1, len(arr)):
if arr[i] == arr[i - 1]:
return False
return True
#
def heap_sort(arr):
#
for i in range(len(arr)):
heap_insert(arr, i)
# ,
for i in range(len(arr)):
swap(arr, 0, len(arr) - 1 - i)
heapify(arr, 0, len(arr) - 1 - i)
#
def heap_insert(arr, index):
parent = (index - 1) // 2
while parent >= 0 and arr[index] > arr[parent]:
swap(arr, index, parent)
index = parent
parent = (index - 1) // 2
#
def heapify(arr, index, size):
left = 2 * index + 1
while left < size:
if arr[left] > arr[index]:
if left + 1 < size and arr[left + 1] > arr[left]:
swap(arr, index, left + 1)
index = left + 1
else:
swap(arr, index, left)
index = left
elif left + 1 < size and arr[left + 1] > arr[index]:
swap(arr, index, left + 1)
index = left + 1
else:
break
left = 2 * index + 1
#
def swap(arr, i, j):
temp = arr[i]
arr[i] = arr[j]
arr[j] = temp
#
if __name__ == '__main__':
#
arr = [5, 3, 7, 1, 4]
heap_sort(arr)
print(arr)
print()
arr = [1, 3, 4, 2, 5]
heap_sort(arr)
print(arr)
print()
arr = [8, 5, 2, 9, 4, 2, 9, 9, 6, 8, 9, 1, 6, 3, 4, 5, 9, 6, 8, 5, 7, 3, 5, 6, 6, 7, 9, 6, 4, 8, 9, 4, 7, 5, 9, 2,
2, 6, 1, 8, 3, 2, 5, 4, 6, 6, 7, 2, 1, 5, 7, 1, 7, 3, 2, 6, 1, 9, 6, 2, 3, 4, 9, 1, 3, 1, 6, 8, 1, 3, 1, 2,
2, 5, 6, 2, 1, 4, 3, 5, 6, 8, 1, 8, 9, 1, 8, 1, 8, 3, 4, 4, 3, 1, 9, 6, 9, 5, 8, 7]
heap_sort(arr)
print(arr)
print()
chas = ['a', 'b', 'c']
print(is_unique_space_first(chas)) # True
chas = ['1', '2', '1']
print(is_unique_space_first(chas)) # False
何か質問やアドバイスがあれば、コメントエリアでコメントや指摘を歓迎します.
時間と労力を費やしてくれてありがとう!