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

全部评论
妈呀 这第一题是真的难
点赞 回复 分享
发布于 2023-09-02 20:36 江苏
点赞 回复 分享
发布于 2023-08-29 21:23 上海
伊泽 神!!!
点赞 回复 分享
发布于 2023-08-29 21:07 安徽
确实比较简单
点赞 回复 分享
发布于 2023-08-29 21:06 上海

相关推荐

04-25 18:13
五邑大学 Java
后来123321:大二两段实习太厉害了,我现在大二连面试都没有
点赞 评论 收藏
分享
评论
5
1
分享

创作者周榜

更多
牛客网
牛客企业服务