面试算法题总结(二)
2011-04-16 14:00
337 查看
求子数组的最大和:
输入一个整形数组,数组里有正数也有负数。数组中连续
的一个或多个整数组成一个子数组,每个子数组都有一个和。求所有子数组的和的最大值。要求时间复杂度为O(n)。
例如:输入的数组为1,-2,3,10,-4,7,2,-5;和最大的子数组为3,10,-4,7,2;因此输出为该子数组的和18。
解决方法如下:
输入一个整形数组,数组里有正数也有负数。数组中连续
的一个或多个整数组成一个子数组,每个子数组都有一个和。求所有子数组的和的最大值。要求时间复杂度为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)); } }
相关文章推荐
- 互联网面试总结(三) : 算法
- 微软面试、经典算法、编程艺术、红黑树4大系列总结
- 面试常考算法题总结(一)
- 计算机专业找工作面试面经总结(操作系统,数据库,数据结构,算法,虚拟化,编程实践等)
- 深信服算法工程师面试总结
- 机器学习常见算法总结(面试用)
- 【面试】算法面试复习总结
- 微软面试、经典算法、编程艺术、红黑树4大系列总结
- 前端面试常见算法题总结
- 面试总结之-查找算法分析
- 机器学习常见算法个人总结(面试用)
- 面试之图论[Graph],算法摘要总结
- 2015校招笔试面试算法总结之蓝汛笔试
- 微软面试、经典算法、编程艺术、红黑树4大系列总结
- 机器学习常见算法个人总结(面试用)
- 2018阿里巴巴算法岗位实习面试总结(朋友的面试)
- 面试遇见的算法题,进行一下系统总结学习
- 面试常用算法总结——排序算法(java版)
- 12.20今日头条实习面试总结-算法工程师
- 微软面试、经典算法、编程艺术、红黑树4大系列总结