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实习##拼多多暑假实习面经#