现在的位置: 首页 > 综合 > 正文

2013年 微软面试题目

2013年07月07日 ⁄ 综合 ⁄ 共 786字 ⁄ 字号 评论关闭

微软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 stub
		int[] 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;

	}

抱歉!评论已关闭.