Pythonで配列が単調(モノトニック)かどうかを判定する方法
この記事では、与えられた配列が「単調(モノトニック)」であるかどうかを判定するための考え方と実装方法について解説します。
問題の定義
n個の整数を含む配列 Arr が入力として与えられます。このとき、その配列が単調な性質を持っているかどうかを判定する必要があります。
配列が単調であるとは、要素が最初から最後まで連続して増加しているか、または連続して減少している状態を指します。つまり、増加と減少が混在していない配列が単調な配列です。
数学的な定義
配列 A が単調増加であるのは、すべての i <= j に対して次の条件が成り立つ場合です。
A[i] <= A[j]
同様に、配列 A が単調減少であるのは、すべての i <= j に対して次の条件が成り立つ場合です。
A[i] >= A[j]
実際の実装では、隣接するすべての要素のペアが上記のいずれかの条件を満たしているかどうかを確認します。隣接要素だけを比較すれば十分です。なぜなら、隣接要素間で大小関係が保たれていれば、配列全体でもその関係が成り立つからです。
実装例
それでは、Pythonでの具体的な実装を見てみましょう。
def isMonotonic(A):
return (all(A[i] <= A[i + 1] for i in range(len(A) - 1)) or
all(A[i] >= A[i + 1] for i in range(len(A) - 1)))
# メイン処理
A = [1,2,3,4,7,8]
print(isMonotonic(A))
実行結果
True
コードの解説
この実装では、all() 関数とジェネレータ式を組み合わせることで、簡潔に判定を行っています。
- 最初の
all():すべての隣接ペア A[i] <= A[i+1] が成立していれば True を返します(単調増加のチェック)。 - 2番目の
all():すべての隣接ペア A[i] >= A[i+1] が成立していれば True を返します(単調減少のチェック)。 or演算子により、どちらか一方の条件を満たせば、その配列は単調であると判定されます。
このアルゴリズムの計算量は O(n) であり、配列を一度走査するだけで判定が完了するため、非常に効率的です。
まとめ
この記事では、Pythonを使って配列が単調増加または単調減少のどちらかの性質を持つかどうかを判定する方法を学びました。all() 関数を活用することで、読みやすく効率的なコードを書くことができます。同様の手法は、データの傾向分析やバリデーション処理など、さまざまな場面で応用できます。
-
Pythonで文字列がパングラムかどうかを判定するプログラムの作成方法
本記事では、与えられた文字列がパングラムであるかどうかを判定するPythonプログラムの解法とアプローチについて詳しく解説します。 問題の概要 文字列入力が与えられたとき、その文字列がパングラムであるかどうかを判定するPythonプログラムを作成します。 パングラムとは? パングラムとは、英語のアルファベット26文字すべてを少なくとも1回ずつ含む文章や一連の単語のことです。有名な例として「The quick brown fox jumps over the lazy dog」があります。 解法のアプローチ この問題は、以下の手順で解くことができます。 アルファベット全体を表す基準となる文字列
-
Pythonで与えられた数値がフィボナッチ数かどうかを判定する方法
本記事では、与えられた数値がフィボナッチ数であるかどうかを判定する問題の解決策について解説します。 問題の定義 ある数値 n が与えられたとき、その数値がフィボナッチ数であるかどうかを判定します。 第 n 項のフィボナッチ数は、直前の2つのフィボナッチ数の和として定義されることは広く知られています。しかし、フィボナッチ数列には漸化式以外にも興味深い数学的性質があります。 フィボナッチ数の判定条件 ある数値 n がフィボナッチ数であるのは、「5×n² + 4」または「5×n² − 4」のいずれかが完全平方数であるとき、かつそのときに限る この性質を利用すれば、フィボナッチ数列を実際に生成しなくて