2023暑假实习拼多多买菜后端面试题java

1旋转打印,生成旋转数组

1~25

打印

1 2 3 4 5

16 17 18 19 6

15 24 25 20 7

14 23 22 21 8

13 12 11 10 9

典型模拟题,两个方向数组,遇到边界或有的值换方向;当时错想用打印的那个数/n%4然后定位到方向里换,不对,只能打印最外圈,数组越界,下来换思路只看是否越界或者有数就换方向就可以,但是要保存之前的值,代码如下:

import java.util.*;
public class Main {
    private static void printArray(int n){
            int[] dir_x=new int[]{0,1,0,-1};
            int[] dir_y=new int[]{1,0,-1,0};
            int[][] res=new int[n][n];
            int i=1;
            int x=0;
            int y=0;
            int t=0;
            while(true){
                System.out.println(Arrays.deepToString(res));
                System.out.println("/////");
                
                res[x][y]=i;
                int q=x;
                int w=y;
                x+=dir_x[t];
                y+=dir_y[t];
				//换向检查、短路计算、返回上一个状态再前进
                if(x<0 ||y<0 || x>=n || y>=n||res[x][y]!=0){
                    t++;
                    t=t%4;
                    x=q+dir_x[t];
                    y=w+dir_y[t];
                }
                if(i==n*n){
                    break;
                }
                i++;
            }
            for(int k=0;k<n;k++){
                for(int j=0;j<n;j++){
                    System.out.print(res[k][j]);
                    if(j!=n-1){
                        System.out.print(" ");
                    }
                }
                System.out.println();
            }
            return;
    }

    public static void main(String[] args) {
        printArray(5);
        return;
    }
}

2.智力题,赛马

64马,8跑道,找前四

前8场:8组跑

留下每组前4;剩32个

第九场:每组前1跑

去掉后成绩四的所有马,剩16个

1 2 3 4

5 6 7 8

9 10 11 12

13 14 15 16

假设竖方向是前8场的结果,第一排横方向是第九场结果剩余结果

根据推理 14 11 8 12 15 16一定不会是前4

因为1 2 3 7一定比11快

1 2 3 4

5 6 7

9 10

13

1一定是第一,剩下9个两场一定可以出来前一场随便找8个,后一场把剩余的一个与前4跑就可以

答案11场

其他的就是问项目了,智力题主要是分治加回溯?每组必须前四,因为没法判断不同组之间的相对顺序;

其他就是问项目了

#拼多多面经##我的实习求职记录##我的失利项目复盘##2023实习##拼多多暑假实习面经#
全部评论
阿里Java暑期实习内推考虑吗
点赞 回复 分享
发布于 2023-03-24 12:16 浙江

相关推荐

8 25 评论
分享
牛客网
牛客企业服务