问题描述:

Find the contiguous subarray within an array (containing at least one number) which has the largest sum. 
For example, given the array [−2,1,−3,4,−1,2,1,−5,4], 
the contiguous subarray [4,−1,2,1] has the largest sum = 6.

问题分析(参考了算法导论第4章分治策略的内容):

为求一个含负数的一组数种,和为最大的子数组
这里使用分治的思想

首先,这一个子数组它只可能以3种方式存在:
完全在上半部分:low--mid
完全在下半部分:mid--high
或者跨越中点地存在:可理解为Arr[i..mid]+[mid+1..j]最大的元素和组成

算法的思想:递归地寻求左、右部分的最大子数组和
最后合并每次递归结果的解(只保留最后最大的结果)

时间复杂度分析:

n=1 T(1)=Θ(1)
n>1 子问题——求解左子数组和右子数组;每组子问题求解花费T(n/2)
所以算法的运行时间T(n)递归式为:
T(n)={  Θ(1)       ,n=1
              2T(n/2)  ,n>1
最后可以求解出T(n)=Θ(nlgn)

 #include<iostream>
#include<climits>
using namespace std;
const int infinite=-;
int Find_Max_Crossing_Subarray(int arr[],int low,int mid,int high)//扫描上半部分最大和、下半部分最大和,上下部分结合为跨越中点最大和
{ int left_sum=infinite;
int right_sum=infinite;
int max_left=-,max_right=-,sum=;
for(int i=mid; i>=low; i--)
{
sum+=arr[i];
if(sum>left_sum)
{
left_sum=sum;
max_left=i;
}
}
sum=;
for(int j=mid+; j<=high; j++)
{
sum+=arr[j];
if(sum>right_sum)
{
right_sum=sum;
max_right=j;
}
}
return (left_sum+right_sum);
}
int Find_Maximum_Subarray(int arr[],int low,int high)//
{
if(high==low)//只有一个元素的时候
return arr[low];
else
{
int mid=(low+high)/;
int leftSum=Find_Maximum_Subarray(arr,low,mid);
int rightSum=Find_Maximum_Subarray(arr,mid+,high);
int crossSum=Find_Max_Crossing_Subarray(arr,low,mid,high);
if(leftSum>=rightSum&&leftSum>=crossSum)
return leftSum;
else if(rightSum>=leftSum&&rightSum>=crossSum)
return rightSum;
else return crossSum;
}
}
int main()
{
int arr[]= {,,,-,,,,,-,};
int ans=Find_Maximum_Subarray(arr,,);
cout<<ans<<endl;
return ;
}

最大子数组问题/Maximum Subarray的更多相关文章

  1. LeetCode 53. 最大子序和(Maximum Subarray)

    53. 最大子序和 53. Maximum Subarray 题目描述 给定一个整数数组 nums,找到一个具有最大和的连续子数组(子数组最少包含一个元素),返回其最大和. LeetCode53. M ...

  2. 【数组】Maximum Subarray

    题目: Find the contiguous subarray within an array (containing at least one number) which has the larg ...

  3. [Swift]LeetCode53. 最大子序和 | Maximum Subarray

    Given an integer array nums, find the contiguous subarray (containing at least one number) which has ...

  4. [LeetCode] Maximum Product Subarray 求最大子数组乘积

    Find the contiguous subarray within an array (containing at least one number) which has the largest ...

  5. [LeetCode] 152. Maximum Product Subarray 求最大子数组乘积

    Given an integer array nums, find the contiguous subarray within an array (containing at least one n ...

  6. 【数据结构】算法 Maximum Subarray

    最大子数组:Maximum Subarray 参考来源:Maximum subarray problem Kadane算法扫描一次整个数列的所有数值,在每一个扫描点计算以该点数值为结束点的子数列的最大 ...

  7. 【LeetCode】53. Maximum Subarray 最大子序和 解题报告(Python & C++ & Java)

    作者: 负雪明烛 id: fuxuemingzhu 个人博客: http://fuxuemingzhu.cn/ 目录 题目描述 题目大意 解题方法 暴力解法 动态规划 日期 题目地址: https:/ ...

  8. [LeetCode] Maximum Size Subarray Sum Equals k 最大子数组之和为k

    Given an array nums and a target value k, find the maximum length of a subarray that sums to k. If t ...

  9. [LeetCode] Maximum Subarray 最大子数组

    Find the contiguous subarray within an array (containing at least one number) which has the largest ...

随机推荐

  1. JS鼠标滚动插件scrollpath使用介绍

    JS鼠标滚动插件scrollpath:在这个插件中首先要引人的JS是jQuery,因为后面的JS都是基于它的.再者需要引入的是jquery.scrollpath.js.scrollpath.css还有 ...

  2. 20169207《Linux内核原理与分析》第八周作业

    本章的作业依旧包括两部分,1.阅读学习教材「Linux内核设计与实现 (Linux Kernel Development)」第教材第11,12章. 2.学习MOOC「Linux内核分析」第六讲「进程的 ...

  3. noip第9课资料

  4. 记一次spring里bean无法注入的历程

    应用启动的时候失败,看了下异常,是这个---NoUniqueBeanDefinitionException. 大家都知道,这是因为有俩个类型相同的实例,在被注入的时候,spring不知道该用哪个. 但 ...

  5. [转]Android SQLite

    数据库操作SQLite Expert Personal 3 注:下载相关SQLite的文档在:http://www.sqlite.org/ 具体的sql语句不作长细介绍,在本博客中也有相关的文章. 一 ...

  6. bootstrap 警告框多个删除

    <!DOCTYPE html><html> <head> <meta charset="UTF-8"> <title>& ...

  7. [FMX]获取控件样式中的指定项目以便进行调节

    [FMX]获取控件样式中的指定项目以便进行调节 2017-03-26 • C++ Builder.Delphi.教程 • 暂无评论 • swish •浏览 650 次 FMX 的样式丰富了我们的设计, ...

  8. 缓存中使用的ReentrantReadWriteLock锁

    java中提供了lock锁,简便了设计缓存,下面程序主要是使用读写锁的应用.... import java.util.HashMap; import java.util.Map; import jav ...

  9. 10 个免费的Bootstrap Admin 主题,模板收集

    In designing websites today, one of the must have frameworks is the twitter bootstrap. To those who ...

  10. 彻底卸载Oracle database 12c教程

    1.WIN+R,然后输入regedit,回车:2.在注册表中,进入目录:\HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services,删除所有以oracl ...