求连续子数组的最大和
2014-04-08 23:19
190 查看
题目来源:《剑指offer》面试题31,《编程珠玑》第八章,LeetCode OJ的Maximum Subarray。
题目大意:
输入一个整型数组,数组里有正数也有负数。数组中一个或连续的多个整数组成一个子数组。求所有子数组的最大和。
例如,数组为{1,-2,3,10,-4,7,2,-5},和最大的子数组为{3,10,-4,7,2},因此返回的结果为子数组的和18.
来自Google,微软等很多知名公司的面试题,2005年浙江大学计算机系的考研题的最后一道程序设计题,貌似是风靡一时的一道题。
参考链接: 程序员编程艺术:第七章、求连续子数组的最大和、程序员面试题精选100题(03)-子数组的最大和
解题思路:
解法一:O(n3)
最最简单粗暴的解法,就是列出数组的所有子集,然后一一计算总和,记录最大值。
不多说,伪代码就是这样:
View Code
题目大意:
输入一个整型数组,数组里有正数也有负数。数组中一个或连续的多个整数组成一个子数组。求所有子数组的最大和。
例如,数组为{1,-2,3,10,-4,7,2,-5},和最大的子数组为{3,10,-4,7,2},因此返回的结果为子数组的和18.
来自Google,微软等很多知名公司的面试题,2005年浙江大学计算机系的考研题的最后一道程序设计题,貌似是风靡一时的一道题。
参考链接: 程序员编程艺术:第七章、求连续子数组的最大和、程序员面试题精选100题(03)-子数组的最大和
解题思路:
解法一:O(n3)
最最简单粗暴的解法,就是列出数组的所有子集,然后一一计算总和,记录最大值。
不多说,伪代码就是这样:
int main(){ int a[] = {1,-2,3,10,-4,7,2,-5}; int sum = FindGreatestSumOfSubArray(a,sizeof(a)/sizeof(int)); //int sum = MaxSum(a,sizeof(a)/sizeof(int)); //int sum = maxsum3(a,0,14); cout << sum << endl; getchar(); return 0; }
View Code
相关文章推荐