美团2024届秋招笔试第一场编程[汇总](上课口胡一下)

一.小美的好矩阵

美团2024届秋招笔试第一场编程[汇总](上课口胡一下)_第1张图片

 口胡:模拟题,数据和题意灰常清楚。

俩层循环枚举每个3﹡3的小矩阵,然后枚举每个小矩阵,12个if判断俩俩相邻的字符是否相等。这里有个技巧:拿出中间的字符,这样就能使用一个偏移量数组,dx[8],dy[8],可以减少很多if判断。判断每个小矩阵就是下图这样:美团2024届秋招笔试第一场编程[汇总](上课口胡一下)_第2张图片

 时间复杂度:O(n*n)

 

二.小美的排列构造美团2024届秋招笔试第一场编程[汇总](上课口胡一下)_第3张图片

 口胡:思维题。注意数组是一个排列,每个数只出现一次。

画一下应该就能出来:重复最小的数和最大的数相邻。

比如n等于8:1 8 2 7 3 6 4 5  权值为1

n等于5:1 5 2 4 3   权值为1

代码大概是下面这样:美团2024届秋招笔试第一场编程[汇总](上课口胡一下)_第4张图片

 

 

     三.小美的数组操作

 

美团2024届秋招笔试第一场编程[汇总](上课口胡一下)_第5张图片

 口胡:[有个想法不知道对不对]

先不考虑操作次数最小,只考虑众数的次数最多。

因为每次操作,对某个数加一,对另外一个数减一,这样相对于总数组的和还是不变的。所以从数组总和开始考虑:对数组中的所有数求和,然后除以数组的元素个数。

这就有俩种情况:

1.能整除

也就是整个数组在操作后每个元素都是一样的。

求出操作完之后应该变成的值,也就是sum/n。

假设x等于sum/n

那最小次数就是对abs(x-a[i])求和 然后除2

 

2.不能整除

对sum/n向上取整,假设是x

操作后的元素是 (n-1)个x 和 一个特殊的数(拿总和减去(n-1)*x)

操作次数的话也就迎刃而解了。美团2024届秋招笔试第一场编程[汇总](上课口胡一下)_第6张图片

             

   四.小美的蛋糕切割美团2024届秋招笔试第一场编程[汇总](上课口胡一下)_第7张图片

 口胡:应该是考察二维前缀和

因为只能切一刀,总共的可能性就是(n+m-2)刀

横着枚举每一刀取min

竖着枚举每一刀取min

因为预处理二维前缀和复杂度是O(n*n),枚举横刀是O(n),竖着也是O(n),所以总时间复杂度是(n*n)

                    

  还打印了几道牛客的题

美团2024届秋招笔试第一场编程[汇总](上课口胡一下)_第8张图片

 口胡:从后往前预处理dp数组。

dp[j][i]表示从最后一个位置到第i个位置字符j的个数。预处理之后,就可以从前往后开始枚举处理答案了[有可能爆int]。

美团2024届秋招笔试第一场编程[汇总](上课口胡一下)_第9张图片

 

 

刚好要下课了   以上解法都是口胡(o。O),晚上自习去验证,如有一些错误,下期会纠正这期的解法。

你可能感兴趣的:(刷算法题,算法,c++)