まず、最長連続部分配列の問題を解くための一般的なアプローチを見てみましょう。以下の手順で解法を構築することができます。
-
変数を初期化します。最長連続部分配列の長さを表す変数、現在の連続部分配列の長さを表す変数、および最長連続部分配列の開始位置を表す変数を用意します。
-
配列をイテレートし、現在の要素と前の要素を比較します。
- もし現在の要素と前の要素が連続している場合、現在の連続部分配列の長さをインクリメントします。
- そうでない場合、現在の連続部分配列の長さを1にリセットし、最長連続部分配列の開始位置を更新します。
-
各要素ごとに現在の連続部分配列の長さを更新するため、ループの最後で最長連続部分配列の長さをチェックします。もし現在の連続部分配列の長さが最長の場合、最長連続部分配列の長さと開始位置を更新します。
-
最終的に、最長連続部分配列の長さと開始位置から、最長連続部分配列を取得することができます。
上記のアルゴリズムをPythonのコードに落とし込んでみましょう。
def longest_subarray(arr):
max_len = 1
curr_len = 1
start_idx = 0
for i in range(1, len(arr)):
if arr[i] == arr[i-1] + 1:
curr_len += 1
else:
curr_len = 1
start_idx = i
if curr_len > max_len:
max_len = curr_len
longest_subarray = arr[start_idx:start_idx+max_len]
return longest_subarray
# 使用例
array = [1, 2, 3, 5, 7, 8, 9, 10, 11, 12]
result = longest_subarray(array)
print(result) # [7, 8, 9, 10, 11, 12]
このコードでは、与えられた配列 arr
の最長連続部分配列を見つける関数 longest_subarray
を定義しています。関数内で上述したアルゴリズムを実装し、最長連続部分配列をリストとして返します。
以上がPythonでの最長連続部分配列のHackerrank問題の解法とコード例です。この方法を使えば、同様の問題に対して効率的かつシンプルな解答が得られるでしょう。