leetcode 周赛 439

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 };

 

posted on 2025-03-05 15:07  greenofyu  阅读(4)  评论(0)    收藏  举报