网易有道面试总结

网易有道面试总结


第一次实习生面试给了网易有道,总结一下面试的经验,方便日后回顾。有道的一面和二面主要都是就算法和项目展开,并没有对基础知识进行过多的提问,可以看出在面试官也没有准备的情况下,手写算法一定是面试着重考察的,而算法所占的比重取决于面试官准备的程度。

  • 连续最大子数组
  • 连续最大子数组,并求得起始位置
  • 连续子数组和最小
  • 连续子数组求绝对值和最小
  • 最大存水量
  • 收集雨水
  • 直方图中找最大矩形
连续最大子数组

第一题十分简单,求解连续最大子数组,不多说,使用动态规划按照递推公式即可得解。
题目解析:当然这道题也存在着某些细节上的问题,例如对于子数组是否能够为空的问题,当数组全部都是负数的时候,如果数组能够为空,那么连续最大的子数组和为0,如果不能够为空,那么连续最大的子数组的和为最大的那个负数。
在代码中的体现如下:

    public static int getMaxSum(int[] a){
        int length=a.length;
        int max=a[0];//如果可以为空那么这里赋值为0,不能为空赋值为a[0]
        int nmax=0;
        for(int i=0;i<length;i++){
            nmax=Math.max(nmax+a[i], a[i]);
            if(nmax>max){
                max=nmax;
            }
        }
        return max;

其实动态规划中要做的就是找到能够标示当前i状态的表达式,以及怎么从第i个状态推演出第i+1个状态的表达式。首先第一步,以这个题为例,因为要求连续的最大子数组,那么第i个状态下的最大值不是第i-1个状态下的最大值加上a[i],就是a[i]本身(是a[i]本身意味着之前的累加对a[i]做出了负贡献,需要从a[i]这个位置重新开始),在这个过程中不断的存储最大值。

连续最大子数组起始位置

利用ArrayList存储index,对于第i个状态如果是nmax+a[i]较大,则直接将i put进List,否则将list清除,再将iput进。

public static int[] 
  • 1
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值