2023.8.29 B端编程题
第一题.sql题
select a.video_id from uploader_video_record a, ( select uploader_id,avg(video_duration) as avg_time from uploader_video_record group by uploader_id ) b where a.uploader_id = b.uploader_id where b.avg_time > 300 order by b.avg_time desc,a.video_id asc limit 2,4
第二题,lc编辑距离原题类似
string s1,s2; void solve() { int n1 = s1.size(),n2 = s2.size(); s1 = " " + s1,s2 = " " + s2; int f[n1+1][n2+1]; memset(f,0x3f,sizeof f); f[0][0] = 0; for(int i=1;i<=n1;++i){ f[i][0] = f[i-1][0] + (int)s1[i]; } for(int i=1;i<=n2;++i){ f[0][i] = f[0][i-1] + (int)s2[i]; } for(int i=1;i<=n1;++i){ for(int j=1;j<=n2;++j){ if(s1[i] == s2[j]){ f[i][j] = max(f[i][j],f[i-1][j-1]); }else{ f[i][j] = max(f[i][j],max(f[i-1][j]+(int)s1[i],f[i][j-1]+(int)s2[j])); } } } cout << f[n1][n2] << endl; }
第三题.经典简单的树形dp
struct TreeNode{ int val; TreeNode* left; TreeNode* right; }; int ans; unordered_map<TreeNode*,vector<int>> f; void dfs(TreeNode* p){ if(p == nullptr) return; f[p].resize(2,0); if(p->left == nullptr && p->right == nullptr){ return; } int sum1 = 0,sum2 = 0; if(p->left){ dfs(p->left); if(p->left->val == p->val){ sum1 = f[p->left][0]; } f[p][0] = max(f[p][0],max(f[p->left][0],f[p->left][1])); } if(p->right){ dfs(p->right); if(p->right->val == p->val){ sum2 = f[p->right][0]; } f[p][0] = max(f[p][0],max(f[p->right][0],f[p->right][1])); } f[p][1] = max(sum1,sum2); ans = max(ans,max(f[p][0],sum1 + sum2)); } int solve(TreeNode* p) { if(p == nullptr) return 0; ans = 0; dfs(p); return ans; }