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

