C++で与えられた違いの最長の算術部分列
整数配列arrと整数の差があるとすると、arrの最長のサブシーケンスの長さを見つける必要があります。これは、サブシーケンス内の隣接する要素間の差が等差数列になるようなものです。違いと同じです。したがって、入力が[1,5,7,8,5,3,4,2,1]のようで、差が-2の場合、最長の等差数列は[7,5、 3,1]
これを解決するには、次の手順に従います-
- マップを定義するm
- n:=配列arrのサイズ、ans:=0を設定
- 0からn–1の範囲のiの場合
- x:=arr [i]
- m [x]:=1 + m [x --d]
- ans:=maxofおよびm[x]
- 回答を返す
例
理解を深めるために、次の実装を見てみましょう-
#include <bits/stdc++.h> using namespace std; class Solution { public: int longestSubsequence(vector<int>& arr, int d) { int n = arr.size(); map <int,int> m; int ans = 0; for(int i =0;i<n;i++){ int x = arr[i]; m[x] = 1 + (m[x-d]); ans = max(ans,m[x]); } return ans; } }; main(){ vector<int> v1 = {1,5,7,8,5,3,4,2,1}; Solution ob; cout <<ob.longestSubsequence(v1, -2); }
入力
[1,5,7,8,5,3,4,2,1] -2
出力
4
-
最長共通部分列のためのC++プログラム
サブシーケンスは、要素のセットと同じ順序のシーケンスです。シーケンス「stuv」の場合、サブシーケンスは「stu」、「tuv」、「suv」などです。 長さnの文字列の場合、文字列からサブシーケンスを作成する方法は2nあります。 例 文字列「ABCDGH」および「AEDFHR」の最長共通部分列の長さは3です。 #include <iostream> #include <string.h> using namespace std; int max(int a, int b); int lcs(char* X, char* Y, int m, int n){
-
与えられたシーケンスの最長増加部分列を見つけるためのC++プログラム
最長増加部分列は、1つの項目が前の項目よりも大きい部分列です。 ここでは、整数のセットから最長増加部分列の長さを見つけようとします。 Input: A set of integers. {0, 8, 4, 12, 2, 10, 6, 14, 1, 9, 5, 13, 3, 11, 7, 15} Output: The length of longest increasing subsequence. Here it is 6. The subsequence is 0, 2, 6, 9, 13, 15. アルゴリズム longestSubSeq(subarray、n) 入力 :サブ配列と