最大子数组问题-GoLang实现
来源:互联网 发布:vr眼镜评测 知乎 编辑:程序博客网 时间:2024/05/22 05:16
在一个数组A中寻找一个最大的子数组,这个问题可以用分治策略来求解。
首先需要划分问题,最大的子数组只有如下3中情况:
情况1:最大子序列出现在A[low]~A[mid]
情况2:最大子序列出现在A[mid+1]~A[high]
情况3:最大子序列包含A[mid],A[mid+1]
那么,问题的计算就可以分为对两个小的子序列求解,在加上一个复杂度为n的方法,那么整个问题的复杂度为nlgn
package maxSubArrimport( "math")//FindMaximumSubArray 寻找最大子序列func FindMaximumSubArray(A []int, low, high int) (arrLow, arrHigh, arrSum int){ if low == high { return low, high, A[low] } mid := (low + high) / 2 //只有3种情况 //情况1:最大子序列出现在A[low]~A[mid] //情况2:最大子序列出现在A[mid+1]~A[high] //情况3:最大子序列包含A[mid],A[mid+1] leftLow, leftHigh, leftSum := FindMaximumSubArray(A, low, mid) rightLow, rightHigh, rightSum := FindMaximumSubArray(A, mid + 1, high) corssLow, corssHigh, corssSum := findMaximumCorssSubArray(A, low, mid, high) if leftSum >= rightSum && leftSum >= corssSum { return leftLow, leftHigh, leftSum } else if rightSum >= leftSum && rightSum >= corssSum { return rightLow, rightHigh, rightSum } return corssLow, corssHigh, corssSum}func findMaximumCorssSubArray(A []int, low, mid, high int) (arrLow, arrHigh, arrSum int) { leftSum := math.MinInt64 sum := 0 for i := mid; i >= low; i-- { sum = sum + A[i] if sum > leftSum { leftSum = sum arrLow = i } } rightSum := math.MinInt64 sum = 0 for i := mid + 1; i <= high; i++ { sum = sum + A[i] if sum > rightSum { rightSum = sum arrHigh = i } } return arrLow, arrHigh, leftSum + rightSum}
0 0
- 最大子数组问题-GoLang实现
- 最大子数组问题实现
- 【最大子数组问题】php实现
- Python实现求解最大子数组问题
- 最大子数组问题-c++代码实现
- 最大子数组问题
- 最大子数组问题
- 最大子数组问题
- 最大子数组问题
- 最大子数组问题
- 最大子数组问题
- 最大子数组问题
- 最大子数组问题
- 最大子数组问题
- 最大子数组问题
- 最大子数组问题
- 最大子数组问题
- 最大子数组问题
- 解决svn一直报Error validating server certificate for https://XXXX fingerprint
- 计算机知识-编程语言对比
- 关于运算符重载的两种方式的优缺点比较
- SGU 299 Triangle(大数)
- Python excel转xml
- 最大子数组问题-GoLang实现
- PostgreSQL 中文资料汇总
- 输出15个数
- TCP服务器和多个客户端传输数据
- 用CSS使div在整个页面中(水平、垂直)都居中——万能的
- 《15个数字的排序代码》15电气1班43号
- bzoj 2724: [Violet 6]蒲公英
- 纯原创
- linux下安装phpstudy