
Problem: 1713. 得到子序列的最少操作次数挺难的看了提示的求最长公共自序列超时了而且考虑到target数字不相同所以直接用索引替代数字而且只保留target出现过的数字这样arr的长度变短了而且题目变成了求最长上升子序列最长上升子序列用贪心的方案来做维护一个数组若当前数字数组最后一个数字则push_back否则找到当前数字的第一个数字替换掉保持数字最小这样就可以添加更多的数字像 2 10 20其实 2 3 20更好3 6 其实 3 5更好Codeclass Solution { public: int minOperations(vectorint target, vectorint arr) { int n target.size(), m arr.size(); unordered_mapint, int ump; for(int i 0; i n; i) { ump[target[i]] i; } vectorint tr; for(int i 0; i m; i) { if(ump.count(arr[i])!0) { tr.push_back(ump[arr[i]]); } } m tr.size(); if(m 0) return n; vectorint dp{tr[0]}; for(int i 1; i m; i) { if(tr[i] dp.back()) dp.push_back(tr[i]); // else if(tr[i] dp.back()) continue; else { int ind lower_bound(dp.begin(), dp.end(), tr[i]) - dp.begin(); dp[ind] tr[i]; } } return n - dp.size(); } };