垃圾滴滴秋招,面试官自己都不知道最优解是啥,质疑我的最优解?
自我介绍,论文,科研项目,实习经历等问完
手撕代码题目:
顺时针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许愿#