0901小红书笔试Java

1.从前往后,从后往前分别遍历一遍,分别维护一个单调区间最值,最后遍历一下如果遇到长度为0的直接跳过,不为0把两区间长度加起来+1比较是不是最大值即可。
2.给定1和2的序列,有些数字需要固定在一个位置,有些可以自由移动,数据量100,动态规划做,
转移方程,
dp[i][j][0] = min(dp[i-1][j][0],dp[i-1][j][1]+1);
dp[i][j][1] = min(dp[i][j-1][0]+1,dp[i][j-1][1]);
其中i和j分别表示前(i+j)个数字中有i个1和j个2
最后注意一下特殊的地方处理就行比如固定值的地方
3.数据也太弱了吧,我把黑色节点计数输出一下就过82%,再输出个黑色节点数-1(也就是红节点删除只会影响一个黑节点丢失)过18%,这测试数据直接给试出来了,然后直接判断一下有没有红节点度为1的,有就输出黑节点总数(相当于有个叶子节点是红节点不会影响任何黑节点),没有就黑节点总数-1
言归正传
正解dfs看红节点的子节点数量维护一下就行,注意不能直接从root向下遍历求一个最小黑子节点树
随便就能举出一个反例
                     

                 黑
                  |
                 红
                  |  
                 黑  
                  |    
                 红   
                 /\
               黑  黑  

这种答案肯定是3
全部评论
第三题还能这么搞
点赞 回复 分享
发布于 09-01 16:10 北京
第三题我也是这么搞的😂
点赞 回复 分享
发布于 09-01 16:19 湖北
大佬,第三题的边是有向的吗?
点赞 回复 分享
发布于 09-01 16:29 广东
佬 第二题能详细讲讲吗
点赞 回复 分享
发布于 09-01 17:32 浙江
大佬,我就a了一题
点赞 回复 分享
发布于 09-01 23:45 辽宁

相关推荐

7 6 评论
分享
牛客网
牛客企业服务