博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
[leetcode]Maximum Subarray
阅读量:5101 次
发布时间:2019-06-13

本文共 1423 字,大约阅读时间需要 4 分钟。

问题描写叙述:

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.

基本思路:

遍历并记录最大的subarray值。O(n)时间算法

代码:

int maxSubArray(int A[], int n) {  //C++        int max = A[0];        int tmp = 0;        for(int i = 0; i < n; i++)        {            tmp += A[i];            if(tmp > max)                max = tmp;                if(tmp < 0){                tmp = 0;            }        }        return max;    }

分治法

int divideConquer(int A[], int low, int high){  //C++        if(low == high)            return A[low];                int mid = (low + high)/2;        int sum1 = divideConquer(A, low , mid);        int sum2 = divideConquer(A, mid+1, high);        int sum3 = findMidMax(A,low,high,mid);                int max;        max = (sum1 > sum2)? sum1:sum2;        max = (max > sum3)?

max: sum3; // cout << low << high << mid <<max; return max; } int findMidMax(int A[] , int low , int high, int mid){ int max = A[mid],tmp = 0,sum = 0; int i = mid; while(i >= low ) { tmp +=A[i]; if(tmp > max) max = tmp; i--; } sum = max; max = 0 , tmp = 0; int j = mid+1; while(j <= high) { tmp +=A[j]; if(tmp > max) max = tmp; j++; } sum += max; return sum; } int maxSubArray(int A[], int n) { return divideConquer(A,0,n-1); }

转载于:https://www.cnblogs.com/llguanli/p/8513897.html

你可能感兴趣的文章
ActiveMQ与spring整合
查看>>
格式化输出数字和时间
查看>>
关于TFS2010使用常见问题
查看>>
URL编码与解码
查看>>
剑指offer系列6:数值的整数次方
查看>>
poj2752 Seek the Name, Seek the Fame
查看>>
Illustrated C#学习笔记(一)
查看>>
理解oracle中连接和会话
查看>>
HDU 5510 Bazinga KMP
查看>>
[13年迁移]Firefox下margin-top问题
查看>>
Zookeeper常用命令 (转)
查看>>
Bootstrap栅格学习
查看>>
程序员的数学
查看>>
聚合与组合
查看>>
洛谷 P2089 烤鸡【DFS递归/10重枚举】
查看>>
我眼中的技术地图
查看>>
lc 145. Binary Tree Postorder Traversal
查看>>
android dialog使用自定义布局 设置窗体大小位置
查看>>
ionic2+ 基础
查看>>
[leetcode]Minimum Path Sum
查看>>