Maximum Subarray(求数组的子数组之和的最大值)
来源:互联网 发布:福建广电网络宽带费用 编辑:程序博客网 时间:2024/05/21 07:55
问题:求数组的子数组之和的最大值
算法:
1、求得数组 的第一个正数的下标 和 最后一个正数的下标
2、通过下标判断,如果该数组的值都是负值,那么从数组中取最大值输出。否则进行下一步。
3、将相邻的正数合并,相邻的负数合并。形成正负相间的数组
4、将第一个正数和下一个负数相加,如果结果大于零,那么加到下一个正数里面,如果小于零,那么不加到下一个正数里面。遍历整个正负相间的数组,选出相加最大的值,即为最大值。
注意:算法实现为了实现更高的效率,将第三步和第四步合并。
时间复杂度:O(n)
代码实现:
<span style="font-size:14px;">int maxSubArray(vector<int>& nums) { int pos_begin=-1; //first pos numint pos_end=-1; //last neg numint result=0;int sum_pos=0;/*取第一个正数的下标和最后一个正数的下标*/ for(int i=0;i<nums.size();i++){if(nums[i]>0){pos_begin=i;break;}}for(int i=nums.size()-1;i>=0;i--){if(nums[i]>0){pos_end=i;break;}}//cout<<pos_begin<<" "<<pos_end<<endl; /*对于全是负数的处理*/if(-1==pos_begin){result=nums[0];for(int i=0;i<nums.size();i++){ if(result<nums[i]){result=nums[i];}}return result;}else { for(int i=pos_begin;i<=pos_end;i++) { sum_pos+=nums[i];if(sum_pos>result)result=sum_pos;if(sum_pos<=0)sum_pos=0; } return result;} }</span>
2 0
- Maximum Subarray(求数组的子数组之和的最大值)
- LeetCode Maximum Subarray和编程之美 求数组的子数组之和的最大值
- 求数组的子数组之和最大值
- 求数组子数组之和的最大值
- 2.14 求子数组之和的最大值
- 求子数组之和的最大值(二维)
- 求数组的子数组之和的最大值
- [算法题] 求数组的子数组之和的最大值
- [算法题] 求数组的子数组之和的最大值
- [算法题] 求数组的子数组之和的最大值
- 求数组的子数组之和的最大值
- 求数组的子数组之和的最大值
- 2.14求数组的子数组之和的最大值
- 求数组的子数组之和的最大值
- 求数组的子数组之和的最大值
- 求数组的子数组之和的最大值
- 求数组的子数组之和的最大值
- 求数组的子数组之和的最大值
- Java中的Set、List、Map的用法与区别
- A20编译
- cocos2dx中zip包读取解压使用
- OpenGL入门(三):绘制一个三角形
- python学习第二章(使用字符串)
- Maximum Subarray(求数组的子数组之和的最大值)
- 备份,VA自用文件头
- MySQL sql-mode
- Java实验(18) 幻灯片放映
- DataX学习笔记-Reader插件开发
- linux shell函数
- SICP 习题2.32 subsets 寻找子集
- Mysql存储引擎
- RxBus简单实现