C++で最長のバイトニックサブシーケンスの長さを見つけるプログラム
番号のリストがあるとします。最長のビットニックサブシーケンスの長さを見つける必要があります。 Asweノットシーケンスは、厳密に増加してから厳密に減少する場合、バイトニックであると言われます。厳密に増加するシーケンスはバイトニックです。または、厳密に減少するシーケンスもバイトニックです。
したがって、入力がnums =[0、8、4、12、2、10、6、14、1、9、5、13、3、11、7、15]、シーケンス16のサイズのような場合、出力は7になります。
これを解決するには、次の手順に従います-
-
増加するSubSeq:=指定された配列サイズの新しい配列。1で埋める
-
初期化i:=1の場合、i <サイズの場合、更新(iを1増やします)、実行-
-
初期化j:=0の場合、j
-
arr [i]>arr[j]およびincreaseSubSeq[i]
-
増加するSubSeq[i]:=増加するSubSeq [j] + 1
-
-
*decreasingSubSeq:=指定された配列サイズの新しい配列。1で埋める
-
-
初期化i:=size -2の場合、i> =0の場合、更新(iを1減らします)、実行-
-
初期化j:=size -1の場合、j> iの場合、更新(jを1つ減らす)、実行-
-
arr [i]>arr[j]およびdecinancingSubSeq[i]
-
減少するSubSeq[i]:=減少するSubSeq [j] + 1
-
-
max:=増加するSubSeq[0]+減少するSubSeq[0]-1
-
-
初期化i:=1の場合、i <サイズの場合、更新(iを1増やします)、実行-
-
増加するSubSeq[i]+減少するSubSeq[i]-1>最大の場合、次のようになります。
-
max:=増加するSubSeq[i]+減少するSubSeq[i]-1
-
-
最大値を返す
-
-
-
理解を深めるために、次の実装を見てみましょう-
例
#include<iostream> using namespace std; int longBitonicSub( int arr[], int size ) { int *increasingSubSeq = new int[size]; for (int i = 0; i < size; i++) increasingSubSeq[i] = 1; for (int i = 1; i < size; i++) for (int j = 0; j < i; j++) if (arr[i] > arr[j] && increasingSubSeq[i] < increasingSubSeq[j] + 1) increasingSubSeq[i] = increasingSubSeq[j] + 1; int *decreasingSubSeq = new int [size]; for (int i = 0; i < size; i++) decreasingSubSeq[i] = 1; for (int i = size-2; i >= 0; i--) for (int j = size-1; j > i; j--) if (arr[i] > arr[j] && decreasingSubSeq[i] < decreasingSubSeq[j] + 1) decreasingSubSeq[i] = decreasingSubSeq[j] + 1; int max = increasingSubSeq[0] + decreasingSubSeq[0] - 1; for (int i = 1; i < size; i++) if (increasingSubSeq[i] + decreasingSubSeq[i] - 1 > max) max = increasingSubSeq[i] + decreasingSubSeq[i] - 1; return max; } int main() { int arr[] = {0, 8, 4, 12, 2, 10, 6, 14, 1, 9, 5, 13, 3, 11, 7, 15}; int n = 16; cout << longBitonicSub(arr, n); }
入力
[0, 8, 4, 12, 2, 10, 6, 14, 1, 9, 5, 13, 3, 11, 7, 15], 16
出力
7
-
Pythonで最長のアナグラムサブシーケンスの長さを見つけるプログラム
2つの小文字の文字列SとTがあるとすると、最長のアナグラムサブシーケンスの長さを見つける必要があります。 したがって、入力がS =helloworld、T =hellorldの場合、出力は8になります これを解決するには、次の手順に従います- c:=新しいマップ、d:=新しいマップ 0からaのサイズの範囲のiの場合、実行 cのa[i]の場合、 c [a [i]]:=c [a [i]] + 1 それ以外の場合 c [a [i]]:=1 0からbのサイズの範囲のiの場合、実行 dのb[i]の場合、 d [b [i]]:=
-
Pythonで最も長いバランスの取れたサブシーケンスの長さを見つけるプログラム
括弧「(」および「)」を含む文字列sがあるとすると、バランスの取れた括弧の最長のサブシーケンスの長さを見つける必要があります。 したがって、入力がs =())(()(の場合、出力は4になります。これは、 ()()のようなサブシーケンスを取ることができるためです。 これを解決するには、次の手順に従います- res:=0 n:=sのサイズ close:=0 n-1から0の範囲のiの場合、1ずつ減らします。 s[i]が)と同じ場合、 close:=close + 1 それ以外の場合 0の場合、 close:=close-1 r