2017滴滴新锐计划研发岗面试中的编程题

二面中遇到了下面两个编程题

  • 走台阶问题(n级台阶,每次只能走1个或者2个台阶–>总共有多少种走法)
  • 寻找连续子数组最大和问题

第一题采用递归即可实现,第二题的实现时间复杂度为O(n),具体解法如下:

/**
 * 在滴滴软件研发工程师面试过程中遇到的编程题
 * Created by liuming on 2017/4/26.
 */
public class 面试编程题_滴滴 {

    /*******************************************
     * 走台阶问题:n级台阶,每次只能走1个或者2个台阶-->总共有多少种走法
     *******************************************/
    private static int pathCount = 0;

    static void findPath(int n) {
        if (n - 1 == 0 || n - 2 == 0) {
            pathCount++;
        }

        if (n - 1 > 0) {
            findPath(n - 1);
        }
        if (n - 2 > 0) {
            findPath(n - 2);
        }
    }

    /*******************************************
     * 寻找连续子数组最大和问题<br>
     * 以索引i结尾的的子数组最大和有两种情况(假设以i结尾的子数组最大和为sum(i)):
     * ①若sum(i-1)<0,sum(i-1)+arr[i]<arr[i],最大值为sum(i)=arr[i];
     * ②若sum(i-1)>=0,sum(i-1)+arr[i]>=arr{i],最大值为sum(i)=sum(i-1)+arr[i]
     *******************************************/
    static int findMaxSum(int[] arr) {
        int result = arr[0];
        int sum = arr[0];
        for (int i = 2; i < arr.length; i++) {
            if (sum > 0) {
                sum += arr[i];
            } else {
                sum = arr[i];
            }

            if (result < sum) {
                result = sum;
            }
        }
        return result;
    }

}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值