美团笔试真题
美团笔试0308
小牛的文本加密
模拟
1 |
|
以上代码居然不能ac,会超时。
要优化您的代码,减少不必要的操作,您可以考虑以下几个方面:
减少字符串复制操作: StringBuilder.delete() 和 StringBuilder.append() 的频繁调用可能会引发性能问题。可以通过使用队列或者更直接的操作来减少这些问题。
位移优化: 您在每次位移时,直接删除并追加字符串的做法会导致性能问题,尤其是在字符串长度较大的情况下。可以考虑通过记录偏移量来避免重复操作。
- 时间复杂度:$O(n^2)$
- 空间复杂度:O(n)(用于存储字符串和解密后的结果)。
小牛架炮
排序+哈希表
数据结构设计
- Cannon 类:用于表示炮台,包括它的坐标 (x, y) 和它的索引 index。
- Map<Integer, List
> rowMap:记录每个行上所有炮台的信息,键是列坐标 y,值是该行上所有炮台的列表。 - Map<Integer, List
> colMap:记录每个列上所有炮台的信息,键是行坐标 x,值是该列上所有炮台的列表。 - Cannon[] cannons:存储所有炮台的数组,方便后续的计算。
预处理:存储炮台位置
遍历输入的每个炮台的 (x, y) 坐标,构造炮台对象,并将其放入对应行和列的 rowMap 和 colMap 中。
排序
对每一行和每一列的炮台按坐标排序:
对 rowMap 中的每个列表按 x 坐标升序排列。
对 colMap 中的每个列表按 y 坐标升序排列。 这样排序是为了方便后续通过二分查找定位炮台的位置,从而更容易判断哪些炮台是可以被攻击到的。计算每个炮台能攻击到的目标数
对于每个炮台:
同行:找到它所在行的所有炮台,利用二分查找确定该炮台在同行中的位置。然后检查它左边和右边是否有其它炮台,若存在,且它们距离该炮台不超过一个单位,它们就可以被攻击。
同列:同样的方法处理同列的炮台,判断它上边和下边是否有可以攻击到的炮台。
对于同行和同列的炮台,加入一个 targets 集合,以避免重复计算。输出
最后,输出每个炮台能够攻击到的炮台的数量,即 targets 集合的大小。
1 |
|
- 时间复杂度:O(nlogn),遍历炮O(n),每次二分查找炮的位置O(logn)。
- 空间复杂度:O(n),用于存储HashMap和临时列表。
小牛的有根树
先放弃了,chatgpt和cursor都解不出来的题。
美团笔试真题
http://example.com/2025/03/16/posts/meituan/