3.14号,阿里实习笔试的第二道编程是什么意思?给定一个n行m列的矩阵,矩阵中的1表示人,0表示灯光,灯光可以往上下左右四个方向照射,灯光照射距离无限远(不明白什么意思),照到一个人得一分,求最后的总得分?
示例:
2 4
0 1 0 0
1 0 1 0
输出9
这个(1,4)位置的为什么往下照得一分????
示例:
2 4
0 1 0 0
1 0 1 0
输出9
这个(1,4)位置的为什么往下照得一分????
全部评论
(1,4)是往左照得1分吧
感觉是动态规划相关的题
(0,4)和(0,3)往左照都会得一分,你说灯泡往下照不得分,你算错了
面试的时候面试官和我聊到这个题目,他说关键是避免重复计算,可以考虑用一个标记矩阵什么的,不过我还是不太明白应该怎么做
dfs深度便利 维护一个visited数组
我是用前缀和计算每个方向上是否有人然后遍历一边数组累加得分(至今没有面试😫)
我是这样想的:横着遍历每一行,每一行内部的增量规则是,如果一个0左右两边都有1,那么这个0就记两分,只有一边有1就记1分,否则不计分,这个统计过程是可以一次行遍历完成的,具体做法是设置一个prevHas1变量用于标志1是否出现过,用一个count0变量统计0的数量,当遇到1时,根据prevHas1与count0计分,随后将prevHas1置1,count0清零。然后纵向遍历也是一样的统计方法。
我拿前缀和写的,A了80%,可能边界有一些问题吧
正向遍历一遍,动态规划的思想拿到right和down的结果,反向遍历一遍得到up和left的结果,反向遍历过程中就把结果计算出来了
相关推荐
点赞 评论 收藏
分享
点赞 评论 收藏
分享
11-16 07:24
百度_算法工程师(实习员工) shtdbb_:对口大厂实习重要,我找大模型,知识图谱的论文从来没人问。主要是对口的话面试官才有的问哈哈,要不然他也不懂,没感兴趣的,就只能问你八股了。
点赞 评论 收藏
分享