C++程式:獲取n倍複製序列中最長子序列的長度


假設我們有一個包含n個元素的陣列A。我們可以建立一個新的陣列,該陣列由n箇舊陣列的副本組成,元素首尾相連。我們必須找到新陣列中最長遞增子序列的長度?我們知道,如果p可以透過移除b中的零個或多個元素來獲得,則序列p是陣列b的子序列。陣列的最長遞增子序列是其元素按嚴格遞增順序排列的最長子序列。

問題類別

在資料結構中,陣列是特定型別元素的有限集合。陣列用於在連續的記憶體位置儲存相同型別的元素。陣列被分配一個特定的名稱,並在各種程式語言中透過該名稱引用。要訪問陣列的元素,需要索引。我們使用術語“name[i]”來訪問陣列“name”中位於位置“i”的特定元素。可以使用陣列實現各種資料結構,例如堆疊、佇列、堆和優先佇列。陣列的操作包括插入、刪除、更新、遍歷、搜尋和排序操作。請訪問下面的連結以瞭解更多資訊。

https://tutorialspoint.tw/data_structures_algorithms/array_data_structure.htm

因此,如果我們問題的輸入類似於A = [3, 1, 4, 1, 5, 9],則輸出將為5,因為可能的子序列將為[1, 3, 4, 5, 9]。

步驟

為了解決這個問題,我們將遵循以下步驟:

Define one set s
for initialize i := 0, when i < size of A, update (increase i by 1), do:
   insert A[i] into s
return size of s

示例

讓我們看下面的實現來更好地理解:

#include <bits/stdc++.h>
using namespace std;
int solve(vector<int> A){
   set<int> s;
   for (int i = 0; i < A.size(); i++){
      s.insert(A[i]);
   }
   return s.size();
}
int main(){
   vector<int> A = { 3, 1, 4, 1, 5, 9 };
   cout << solve(A) << endl;
}

輸入

{ 3, 1, 4, 1, 5, 9 }

輸出

5

更新於:2022年4月8日

157 次瀏覽

開啟你的職業生涯

完成課程獲得認證

開始學習
廣告
© . All rights reserved.