您的位置:首页 > 职场人生

面试算法题总结(二)

2011-04-16 14:00 337 查看
求子数组的最大和:

输入一个整形数组,数组里有正数也有负数。数组中连续
的一个或多个整数组成一个子数组,每个子数组都有一个和。求所有子数组的和的最大值。要求时间复杂度为O(n)。

例如:输入的数组为1,-2,3,10,-4,7,2,-5;和最大的子数组为3,10,-4,7,2;因此输出为该子数组的和18。

解决方法如下:

import java.util.Scanner;
public class Test {
/**
* 计算前几个数的和,如果小于零则重新赋值,置为下一个元素;
* 当b > sum时,更新sum的值;
* 当b < sum时,sum保持不变。
*
* @param num 数组
* @return 所有子数组的和的最大值
*/
public static int maxSum(int[] num) {
int sum = 0;
int b = 0;
//针对所有数都为负数的情况
int temp = num[0];
for (int i = 1; i < num.length; i++) {
if (temp < num[i])
temp = num[i];
}
if (temp < 0)
return temp;
//针对普通情况,数组中不全为负数
for (int i = 0; i < num.length; i++) {
if (b <= 0)
b = num[i];
else
b += num[i];
if (sum < b)
sum = b;
}
return sum;
}
public static void main(String[] args) {
System.out.print("请输入多个整数(以逗号分开):");
Scanner scanner = new Scanner(System.in);
String[] numbers = scanner.nextLine().split(",");
int[] parent = new int[numbers.length];
for (int i = 0; i < numbers.length; i++)
parent[i] = Integer.parseInt(numbers[i]);
System.out.println("所有子数组的和的最大值:" + maxSum(parent));
}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: