美团笔试第一题求大佬理思路

我的做法简化dp  
应为只有两排所以用两个值来表示上一排的两个点的个数
第一排初始化为01
每一个点两个状态 1 是障碍 用中间数组存下来0
                  2 可以走 个数就是上一排的两个点的个数和 
2个点判断完之后刷新值 如果出现都为0的情况便直接返回-1
一直循环到倒数第二排,然后判断如果出口不是障碍直接返回两个值的和

只过了45 我估计陷入了坑里自己想不出哪里错了,有大佬帮忙理一理么#美团##笔试题目#
全部评论
第一题用动态规划做AC了,其他都没有AC。。。     public static void search(int n,int row,int col) {         if(row == 0 && col == 0){             count++;             return;         }         if(array[row][col].equals("X")){             return;         }         if (array[row][col].equals(".") && row == 0 && col != 0){             search(n,row,col-1);             search(n,row+1, col-1);         }         if (array[row][col].equals(".") && row == 1 && col != 0){             search(n,row-1, col-1);             search(n,row, col-1);         }     }
3 回复 分享
发布于 2020-03-12 21:29
第一题可以这么想,默认路径为一条,然后遍历比较每一列的两个值,如果有一列都为x则一条路径都没有,如果有一列都为.则路径条数乘2,其他则路径条数不变。
3 回复 分享
发布于 2020-03-12 21:15
递归45:第二题众数我就不明白了,才9%,不是全部异或一遍就可以了吗
2 回复 分享
发布于 2020-03-12 20:54
同45无解,而且后面还不会做mmp
2 回复 分享
发布于 2020-03-12 20:37
使用DFS,不知道会不会超时 res = 0 def search(row, rows, col, cols, borad):     global res     if row == rows-1 and col == cols-1:         res+=1         return      if row < 0&nbs***bsp;row >=rows&nbs***bsp;col < 0&nbs***bsp;col >= cols:         return     if borad[row][col] == 1:         return      search(row, rows, col+1, cols, borad)     search(row+1, rows, col+1, cols, borad)     search(row-1, rows, col+1, cols, borad) a =[     [0,0,1,0,1],     [1,1,0,0,0] ] search(0,2,0,5,a) print(res)
1 回复 分享
发布于 2020-03-13 01:11
我也使用dp,也只过了45,表示没发现哪里出问题了
1 回复 分享
发布于 2020-03-12 22:10
我dp做出来36%
1 回复 分享
发布于 2020-03-12 21:18
我暴力也是只过了45
1 回复 分享
发布于 2020-03-12 20:51
求波题意
点赞 回复 分享
发布于 2020-03-12 22:16
我写出来了?             for (int j = 0; j < n; j++) {                 if( map[0][j] != 1) {                     dp[0][j] = dp[0][j - 1] + dp[1][j - 1];                 }                 if( map[1][j] != 1) {                     dp[1][j] = dp[0][j - 1] + dp[1][j - 1];                 }             }         System.out.println(dp[1][n-1]);     不知道对不对。。一个for循环搞定,笔试我一道都没做出😂
点赞 回复 分享
发布于 2020-03-12 21:56
第一题我也45.。。。。第三题大佬们不超时怎么做的?
点赞 回复 分享
发布于 2020-03-12 21:26
同45% 总个数a,直接从第2到N-1列,每一列有俩X,直接-1,如果一个X,a不变,如果没有X,a=a*2
点赞 回复 分享
发布于 2020-03-12 21:22
同dp,45分。。没想出来自己哪有问题。。。。
点赞 回复 分享
发布于 2020-03-12 21:17
醉了,我也是45%,想了半天也不知道错在哪了。
点赞 回复 分享
发布于 2020-03-12 21:10
遍历数组45%(我感觉这种是最快的):设置一个数组,[0][0]初始为1,[0][1]初始为0,然后每一列每一列去考虑,每一列如果是X则直接设置为0,否则就加上左边一列的两个数字,比如第二列第一行[0][1]如果是x就直接设置为0,否则[1][1]=[0][0]+[1][0];第二列第二行[1][1]如果是x就直接设置为0,否则[1][1]=[0][0]+[1][0],最后直接输出最后一行最后一列就行了
点赞 回复 分享
发布于 2020-03-12 21:09
害,我第一题用dp ac了45%,第二题暴力36%,明明感觉很简单,我死活找不到错误。一气之下直接交卷了。 又没有大佬帮我看看我的第一题代码到底啥问题 def calWagsNums(n, row1, row2):     grids = [row1, row2]     if grids[0][0] == "X":         return -1     dp = [[0 for _ in range(n)] for _ in range(2)]     dp[0][0], dp[1][0] = 1, 0     grids[0][0] = 1     for j in range(1, n):         for i in range(2):             if grids[i][j] == "X":                 continue             dp[i][j] = 0             if j - 1 >= 0:                 dp[i][j] += dp[i][j - 1]                 if i - 1 >= 0:                     dp[i][j] += dp[i - 1][j - 1]                 if i + 1 < 2:                     dp[i][j] += dp[i + 1][j - 1]     return dp[-1][-1] if dp[-1][-1] != 0 else -1
点赞 回复 分享
发布于 2020-03-12 21:05
同45,不知道错哪儿了     public static void main(String[] args) {         Scanner sc = new Scanner(System.in);         String nn = sc.nextLine();         int n = Integer.valueOf(nn);         String a1 = sc.nextLine();         String a2 = sc.nextLine();         char[][] arr = new char[3][n+1];         for (int i = 1; i <= n; i++) {             arr[1][i] = a1.charAt(i - 1);         }         for (int i = 1; i <= n; i++) {             arr[2][i] = a2.charAt(i - 1);         }         int[][] dp = new int[3][n + 1];         dp[1][1] = 1;         dp[2][1] = 0;         for (int i = 2; i <= n; i++) {             if (arr[1][i] == 'X') {                 dp[1][i] = 0;             } else {                 dp[1][i] = dp[1][i - 1] + dp[2][i - 1];             }             if (arr[2][i] == 'X') {                 dp[2][i] = 0;             } else {                 dp[2][i] = dp[2][i - 1] + dp[1][i - 1];             }         }         System.out.println(dp[2][n] == 0 ? -1 : dp[2][n]);     }
点赞 回复 分享
发布于 2020-03-12 20:51
递归做的也是45
点赞 回复 分享
发布于 2020-03-12 20:45
while True:     try:         n=int(input())         line1=input()         line2=input()         res=1                      if line2[-1]=='X':             print(-1)             break         if n==1:             print(1)             break         for i in range(1,n):             temp=0             if line1[i]=='.':                 temp+=1             if line2[i]=='.':                 temp+=1             if temp==0:                 print(-1)                 break             res*=temp         print(res)         except:         break
点赞 回复 分享
发布于 2020-03-12 20:45
第一题就dp想的太难了吧。。
点赞 回复 分享
发布于 2020-03-12 20:33

相关推荐

叶扰云倾:进度更新,现在阿里云面完3面了,感觉3面答得还行,基本都答上了,自己熟悉的地方也说的比较细致,但感觉面试官有点心不在焉不知道是不是不想要我了,求阿里收留,我直接秒到岗当阿里孝子,学校那边的房子都退租了,下学期都不回学校,全职猛猛实习半年。这种条件还不诱人吗难道 然后现在约到了字节的一面和淘天的复活赛,外加猿辅导。华为笔试完没动静。 美团那边之前投了个base广州的,把我流程卡麻了,应该是不怎么招人,我直接简历挂了,现在进了一个正常的后端流程,还在筛选,不知道还有没有hc。
点赞 评论 收藏
分享
06-07 21:26
江南大学 C++
话不多说,直接上时间线和图片1.2024年10月底发offer,并签三方2.2025年5月底公司违约
从零开始的转码生活:希望所有签了三方但直接违约的公司都倒闭!都倒闭!都倒闭!
点赞 评论 收藏
分享
评论
点赞
7
分享

创作者周榜

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