2013年 微软面试题目

来源:互联网 发布:excel数据怎么排序 编辑:程序博客网 时间:2024/05/17 23:50

微软2013年11月19日面试题目一道

去微软也是有机会的,基础扎实,问的题目都是很基础的,都是平时遇见的题目稍加修改

1.计算数组跳跃的连续的最大和

比如:-1,2,3,5,6,-7,-8,9,2  

最大是9

3+6,

9

2.写尽可能多的case

分析:和普通的求连续的和的最大值一样,这里的连续变成了跳跃,道理一样

当连续时:


    f(i)=max{a[i],s+a[i],f(i-1)}

f(i):第i个包括i之前的连续的和的最大值;

s:与i连着的前面的连续的和

f(i-1):i前面不包括的i的连续的和的最大值


相当于动态规划,写的不清楚或者有问题请留言,转载指明出处

http://blog.csdn.net/yangjunjiezai/article/details/8220038

public static void main(String[] args) {// TODO Auto-generated method stubint[] d = { 1, 2, 3, -6, 5, 9, -7, 7, -22, 99, 88 };System.out.println(getMaxSum(d));}public static int getMaxSum(int[] d) {int max = Math.max(d[0], d[1]);int conOne = d[0];int conTwo = d[1];for (int i = 2; i < d.length; i++) {conOne = conOne + d[i++];if (conOne < 0) {conOne = 0;}if (i < d.length) {conTwo = conTwo + d[i];if (conTwo < 0) {conTwo = 0;}if (max < Math.max(conTwo, conOne)) {max = Math.max(conTwo, conOne);}}System.out.println(max);}return max;}