20230322阿里笔试

第二道01翻转的怎么做啊#阿里笔试2023#
参考大佬讲解
全部评论
只要有多于1个的0就能变1,因为总能通过翻转让0相邻。题目就变成了把0的位置存下来,相邻的0合并(翻转数量是下标相差)。分情况讨论下,如果偶数个0就直接合并求总数,奇数个0就通过两次前缀/后缀判断舍弃哪个0能得到最小的变化次数,复杂度O(n)。
9 回复 分享
发布于 2023-03-22 21:21 北京

相关推荐

08-22 20:10
门头沟学院 Java
点赞 评论 收藏
分享
点赞 评论 收藏
分享
08-23 19:16
莆田学院 Java
1.算法:给定一个宽度为n的无限高游戏界面,初始每列已有一定高度的方块(用数组表示),然后依次下落一系列特定形状的俄罗斯方块(每个方块由若干格子组成),要求模拟下落过程(方块会落到底部或已有方块上),并最终输出游戏界面各列的新高度。思路:对于每个下落方块,根据其形状(需考虑旋转和平移)在初始高度数组上尝试放置:从顶部向下扫描,检查方块底部与当前界面是否碰撞(即方块所占格子的下方是否已有方块或超出底部),找到最低的合法位置后更新对应列的高度(取原高度与方块放置后新高度的最大值),依次处理所有方块即可得到最终各列高度。2.算法:给定n艘船的耐久度数组a和攻击次数k,海盗攻击顺序为左右交替(先左端、再右端、再左端第二艘、右端第二艘,以此类推),每次攻击减少目标船1点耐久,求攻击结束后耐久值非正的船的数量。思路:由于k可能很大,直接模拟每次攻击会超时。通过计算完整攻击轮数(每轮左右各一次)和剩余攻击次数,可确定每艘船实际被攻击的次数:左侧船主要受左端攻击,右侧船主要受右端攻击。遍历每艘船,根据其位置计算所受攻击次数(左侧第i艘船被左端攻击次数为轮数加可能的额外左攻击),若耐久值小于等于攻击次数则被击沉,统计总数即可。
投递小米集团等公司10个岗位
点赞 评论 收藏
分享
评论
3
11
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务