Pythonで線形時間でサイズ3のソートされたサブシーケンスを検索します
N個の数を持つ配列があるとすると、線形(O(n))時間でb [i]
したがって、入力が[13、12、11、6、7、3、31]の場合、出力は[6,7,31]
になります。これを解決するには、次の手順に従います-
- n:=Aのサイズ
- 最大:=n-1、最小:=0
- 小さい:=サイズ1000の配列で、0で埋める
- 小さい[0]:=-1
- 1からnの範囲のiについては、
- A [i] <=A [minimum]の場合、
- 最小:=i
- 小さい[i]:=-1
- それ以外の場合、
- 小さい[i]:=最小
- A [i] <=A [minimum]の場合、
- より大きい:=サイズ1000の配列で、0で埋める
- great [n-1]:=-1
- n-2から-1の範囲のiについては、1ずつ減らします。
- A [i]> =A [maximum]の場合、
- 最大:=i
- great [i]:=-1
- それ以外の場合、
- great [i]:=maximum
- A [i]> =A [maximum]の場合、
- 0からnの範囲のiについては、
- small [i]が-1と同じでなく、greater [i]が-1と同じでない場合、
- return A [smaller [i]]、A [i]、A [greater [i]]
- small [i]が-1と同じでなく、greater [i]が-1と同じでない場合、
- 「何も」を返さない
例
理解を深めるために、次の実装を見てみましょう-
def find_inc_seq(A): n = len(A) maximum = n-1 minimum = 0 smaller = [0]*10000 smaller[0] = -1 for i in range(1, n): if (A[i] <= A[minimum]): minimum = i smaller[i] = -1 else: smaller[i] = minimum greater = [0]*10000 greater[n-1] = -1 for i in range(n-2, -1, -1): if (A[i] >= A[maximum]): maximum = i greater[i] = -1 else: greater[i] = maximum for i in range(0, n): if smaller[i] != -1 and greater[i] != -1: return A[smaller[i]], A[i], A[greater[i]] return "Nothing" arr = [13, 12, 11, 6, 7, 3, 31] print(find_inc_seq(arr) )
入力
[13, 12, 11, 6, 7, 3, 31]
出力
(6, 7, 31)
-
Pythonでリストのサイズを見つける
リストはPythonのコレクションデータ型です。リスト内の要素は変更可能であり、要素に関連付けられた特定の順序はありません。この記事では、Pythonでリストの長さを見つける方法を説明します。つまり、重複しているかどうかに関係なく、リストに存在する要素の数を取得する必要があります。 例 以下の例では、「日」という名前のリストを使用します。まず、len()関数を使用してリストの長さを見つけます。次に、さらにいくつかの要素を追加し、append()関数を使用して長さを再度確認します。最後に、remove()関数を使用していくつかの要素を削除し、長さを再度確認します。要素が重複している場合でも、r
-
Pythonを使用して時差を見つける方法は?
時間デルタオブジェクトを使用してPythonで日付と時刻の計算を行うのは非常に簡単です。日付/時刻に加算または減算する場合は常に、DateTime.datetime()を使用してから、date time.time delta()インスタンスを加算または減算します。時間デルタオブジェクトは、2つの日付または時間の差である期間を表します。タイムデルタコンストラクターには、次の関数シグネチャがあります DateTime.timedelta([日[、秒[、マイクロ秒[、ミリ秒[、分[、時間[、週]]]]]]])¶ 注:すべての引数はオプションであり、デフォルトは0です。引数はint、long、または