1、模拟题
1 class Solution { 2 public: 3 int largestInteger(vector<int>& nums, int k) { 4 int n=nums.size(); 5 map<int,int> mp; 6 for(int i=0;i+k<=n;i++){ 7 unordered_set<int> S; 8 for(int j=i;j<i+k;j++){ 9 S.insert(nums[j]); 10 } 11 for(auto x:S){ 12 // cout<<x<<" "; 13 mp[x]++; 14 } 15 // cout<<endl; 16 } 17 int res=-1; 18 for(auto it=mp.begin();it!=mp.end();it++){ 19 if(it->second==1) 20 res=max(res,it->first); 21 } 22 return res; 23 } 24 };
2、记忆化搜索
常规搜索
1 class Solution { 2 public: 3 int dfs(string& s,int l,int r,int k){ 4 if(l>=r) 5 return r-l+1; 6 int res=max(dfs(s,l+1,r,k),dfs(s,l,r-1,k)); 7 int op=abs(s[r]-s[l]); 8 int t=min(op,26-op); 9 if(k>=t) 10 res=max(res,dfs(s,l+1,r-1,k-t)+2); 11 return res; 12 } 13 int longestPalindromicSubsequence(string s, int k) { 14 int n=s.size(); 15 return dfs(s,0,n-1,k); 16 } 17 };
加上记忆化
1 class Solution { 2 public: 3 int dfs(string& s,int l,int r,int k,vector<vector<vector<int>>>& memo){ 4 if(l>=r) 5 return r-l+1; 6 int& res=memo[l][r][k]; 7 if(res!=-1) 8 return res; 9 res=max(dfs(s,l+1,r,k,memo),dfs(s,l,r-1,k,memo)); 10 int op=abs(s[r]-s[l]); 11 int t=min(op,26-op); 12 if(k>=t) 13 res=max(res,dfs(s,l+1,r-1,k-t,memo)+2); 14 return res; 15 } 16 int longestPalindromicSubsequence(string s, int k) { 17 int n=s.size(); 18 vector<vector<vector<int>>> memo(n,vector<vector<int>>(n,vector<int>(k+1,-1))); 19 return dfs(s,0,n-1,k,memo); 20 } 21 };
3、DP,不太会
1 class Solution { 2 public: 3 int maxSum(vector<int>& nums, int k, int m) { 4 int n=nums.size(); 5 vector<vector<int>> f(k+1,vector<int>(n+1,INT_MIN/2)); 6 vector<int> s(n+1); 7 partial_sum(nums.begin(),nums.end(),s.begin()+1); 8 for(int j=0;j<=n;j++){ 9 f[0][j]=0; 10 } 11 for(int i=1;i<=k;i++){ 12 for(int j=i*m;j<=n;j++){ 13 f[i][j]=f[i][j-1]; 14 int t=INT_MIN/2; 15 for(int L=(i-1)*m;L<=j-m;L++){ 16 t=max(t,f[i-1][L]+s[j]-s[L]); 17 } 18 f[i][j]=max(f[i][j],t); 19 } 20 } 21 return f[k][n]; 22 } 23 };
浙公网安备 33010602011771号