猿题库面试总结

整体而言:这次面试还是收获了一些东西。深深的领悟到自己算法能力的欠缺。其实还是有很大的遗憾的。上来就是两道算法题,直接写算法。项目啥的根本不在意。
最坑爹的是两道算法题都不难,然而由于种种原因当时都没写好:各种原因(旁边再谈论诱人的工资,做了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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值