最大子数组的递归实现
来源:互联网 发布:数据库主键有什么用 编辑:程序博客网 时间:2024/05/20 11:28
源代码
//找最大子数组 数组索引从0开始//2014-2-23#include <iostream>using namespace std;int* FindMiddle(int* array, int low, int high, int middle);int* FindMax(int* array, int low, int high);extern int* gresult;int main(){int array[10];cout << "请输入十个数字:" ;for (int i = 0; i < 10; ++ i)cin >> array[i];int* result = FindMax(array, 0, 9);cout << result[0] << " " << result[1] << " " << result[2] << endl;delete [] gresult;return 0;}int* gresult = new int[3];int* FindMiddle(int* array, int low, int high, int middle){int leftSum = array[middle];int rightSum = array[middle + 1];gresult[0] = middle;gresult[1] = middle + 1;gresult[2] = leftSum + rightSum;int sum = 0;for (int i = middle; i >= low; -- i){sum += array[i];if (sum > leftSum){leftSum = sum;gresult[0] = i;}}sum = 0;for (i = middle + 1; i <= high; ++ i){sum += array[i];if (sum > rightSum){rightSum = sum;gresult[1] = i;}}gresult[2] = leftSum + rightSum;return gresult;}int* FindMax(int* array, int low, int high){int* r1 = new int[3];int* r2 = new int[3];int* r3 = new int[3];if (low == high){gresult[0] = gresult[1] = low;gresult[2] = array[low];return gresult;}else{int middle = (low + high) / 2;int* ptmp;ptmp = FindMax(array, low, middle);r1[0] = ptmp[0];r1[1] = ptmp[1];r1[2] = ptmp[2];ptmp = FindMax(array, middle + 1, high);r2[0] = ptmp[0];r2[1] = ptmp[1];r2[2] = ptmp[2];ptmp = FindMiddle(array, low, high, middle);r3[0] = ptmp[0];r3[1] = ptmp[1];r3[2] = ptmp[2];if (r1[2] >= r2[2] && r1[2] >= r3[2]){gresult[0] = r1[0];gresult[1] = r1[1];gresult[2] = r1[2];delete []r1;delete []r2;delete []r3;return gresult;}else if (r2[2] >= r1[2] && r2[2] >= r3[2]){gresult[0] = r2[0];gresult[1] = r2[1];gresult[2] = r2[2];delete []r1;delete []r2;delete []r3;return gresult;}else{gresult[0] = r3[0];gresult[1] = r3[1];gresult[2] = r3[2];delete []r1;delete []r2;delete []r3;return gresult;}}}
注意:
1、递归是要将问题分解为最小的子问题
2、基本情况和递归情况都要有返回值
0 0
- 最大子数组的递归实现
- 最大子数组--线性非递归实现
- 最大子数组问题分治法(递归)Java实现
- 最大子数组问题-递归法 @ Python
- Java实现:求子数组的最大和(数组)
- 最大子数组java实现
- 最大子数组问题实现
- 最大子数组--python实现
- 最大子数组问题的递归和非递归(线性时间)代码
- 最大子数组递归和非递归(暴力)
- 递归实现求最大子串和
- 连续子数组的最大和 动态规划实现
- 求子数组的最大和 C++实现
- 最大子数组的两种实现源码
- 《算法导论》中求最大子数组的C++实现
- 剑指offer----连续子数组的最大和----java实现
- 连续子数组的最大和 java实现
- 剑指Offer: (Java实现) 连续子数组的最大和
- 方法的虚分派(virtual dispatch)和方法表(method table)
- 英语学习——在路上
- 时间都去哪儿了——2014年总结
- HDU2012
- MFC中CString与字符数组与整型的相互转换
- 最大子数组的递归实现
- hive参数hive.mapred.mode分析
- jQuery对象和DOM对象的区别与联系
- 创业之初需要准备的六个方面
- 数据结构——二叉树的遍历问题(C语言)
- 窗口透明化 AlphaBlend
- 千万当心这10所“野鸡大学”,由于这些学校与正牌知名大学的名字极易混淆,学生们需特别提防。
- Michael和Sophia的英语之路
- 经典DP HDU 2084 数塔