垃圾滴滴秋招,面试官自己都不知道最优解是啥,质疑我的最优解?
自我介绍,论文,科研项目,实习经历等问完
手撕代码题目:
顺时针90°旋转n*n的矩阵arr
这我手撕o(1)空间复杂度转的
代码如下:
//复习旋转
//循环旋转函数**circleRotate(a,b,c,d):**
public static void circleRotate(int[][] arr, int a, int b, int c, int d){
//ab,cd=确定了这外圈
//其实每一批,旋转多少个数呢?d-b个数,比如下面d=3,b=0,d-b=3个
for (int i = 0; i < d - b; i++) {
//下标就是0 1 2 就0--d-b-1
//所以替代的话,咱们下标从i=0--d-b-1,一个一个替换,跟交换函数一样
int tmp = arr[a][b + i];//记忆橘色这一行,从左往右
arr[a][b + i] = arr[c - i][b];//搬粉***那列,c从下往上
arr[c - i][b] = arr[c][d - i];//搬红色c那行,d从右往左
arr[c][d - i] = arr[a + i][d];//搬蓝色d那列,a从上往下
arr[a + i][d] = tmp;//搬记忆的橘色a这一行,b从左往右
}
//最重要的就是下标控制,走向
}
//最开始ab=00,cd=N-1,M-1确定了这外圈,外圈旋转完,
// 将ab++,cd--,就进入内圈,继续调用circleRotate函数循环旋转
public static void rotateMatrixReview(int[][] arr){
if (arr == null || arr.length == 0 || arr[0].length == 0) return;
int a = 0;
int b = 0;
int c = arr.length - 1;
int d = arr[0].length - 1;
while (a < c) circleRotate(arr, a++, b++, c--, d--);
}
public static void test(){
int[][] arr = {
{1, 2, 3, 4},
{6, 7, 8, 9},
{11,12,13,14},
{16,17,18,19}
};
int[][] arr2 = {
{1, 2, 3, 4},
{6, 7, 8, 9},
{11,12,13,14},
{16,17,18,19}
};
//旋转完以后
// {16, 11, 6, 1},
// {17, 12, 7, 2},
// {18, 13, 8, 3},
// {19, 14, 9, 4}
rotateMatrixPrint(arr);
for (int i = 0; i < arr.length; i++) {
for (int j = 0; j < arr[0].length; j++) {
System.out.print(arr[i][j] +" ");
}
System.out.println();
}
System.out.println();
rotateMatrixReview(arr2);
for (int i = 0; i < arr2.length; i++) {
for (int j = 0; j < arr2[0].length; j++) {
System.out.print(arr2[i][j] +" ");
}
System.out.println();
}
}
public static void main(String[] args) {
test();
}
结果:
16 11 6 1
17 12 7 2
18 13 8 3
19 14 9 4
16 11 6 1
17 12 7 2
18 13 8 3
19 14 9 4
我问面试官有比这更好的解法吗?
他说不知道呢,但是感觉太复杂了……………………
我就想问谁能o(1)空间的同时还能o(n)搞定????难道你都不把n^2的数字看完就可以旋转?????还有这种骚操作???????????
然后就是反问环节
我问:咱们部门做啥的?人员规模有多大?未来3--5年发展前景怎么样??
他说,这个问题不便回答,等下一个面试官给你解释………………
然后,刚刚回到工位,查看邮件,发现:
说好的下一个面试官呢??????????
垃圾滴滴,垃圾,浪费我一小时,给你手撕最优解了,你自己都不懂,还问我??
怪不得垃圾滴滴想割百姓韭菜,被国家查到死,垃圾人才办垃圾事儿!
#滴滴##滴滴内推##秋招##2023校招##offer许愿#
查看12道真题和解析
