猿題庫面試總結

整體而言:這次面試還是收穫了一些東西。深深的領悟到自己算法能力的欠缺。其實還是有很大的遺憾的。上來就是兩道算法題,直接寫算法。項目啥的根本不在意。
最坑爹的是兩道算法題都不難,然而由於種種原因當時都沒寫好:各種原因(旁邊再談論誘人的工資,做了3個小時的車,頭暈暈的,好吧不找藉口,還是沒有準備好)後面聽同學說題目基本都是出自leetcode
首先第一題:
給定一個矩陣:然後由外到內依次輸出
如下圖:
這裏寫圖片描述
按照箭頭方向的順序輸出,其實就是一個遞歸,當時傻了,寫的各種 bug

private static int[][] a={{1,2,3},{4,5,6},{7,8,9},{10,11,12}};
    public static void P(int m,int n,int k){
        if(m<0 || n<0){
            return;
        }
        for(int i=k;i<n;i++){
            System.out.println(a[k][i]);
        }
        for(int i=k+1;i<m;i++){
            System.out.println(a[i][n-1]);
        }
        for(int i=n-2;i>=k;i--){
            System.out.println(a[m-1][i]);
        }
        for(int i=m-2;i>k;i--){
            System.out.println(a[i][k]);
        }
        P(m-1,n-1,k+1);
    }

第二題:
說是給定N元錢,然後又 1,3,5,7單位的錢,問有多少種兌換方法
當時直接寫了個遞推式
a[n]=a[n-1]+a[n-3]+a[n-5]+a[n-7]這個遞推式其實也是有意義的。就是在有序的情況下
比如爬樓梯,一次可以爬 1階,3,5,7 等,然而這裏是無序的
當時也是各種原因腦子不轉了。回來之後想起來了,dp 顯然應該有兩個維度,好遺憾
默默的傷心。。。。
遞推式如下:
a[i][j]=a[i-1][i]+a[i][i-coin[i]]

private int[][] a=new int[100][10000];
    private int[] coin={0,1,3,5,7};
    public void getNumberSplit(int n,int k){
        for(int i=0;i<=n;i++)a[i][0]=1;
        for(int i=1;i<=k;i++){
            for(int j=0;j<=n;j++){
                if(j>=coin[i])a[i][j]=a[i-1][j]+a[i][j-coin[i]];
                else a[i][j]=a[i-1][j];
            }
        }
        System.out.println(a[k][n]);
    }

順便說一句:我投的是數據研發:我說我擅長hadoop ,然而一點都不問。只問算法題,打的不好,一棒子打死。。

Tips: JVM 深度資料, 歡迎交流討論
https://github.com/codlife/JVMInternals

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章