最大子数组问题
来源:互联网 发布:北京科技大学 网络咨询 编辑:程序博客网 时间:2024/04/27 14:07
算法导论:最大子数组,c++实现
#include "stdafx.h"
#include<iostream>
#include<vector>
#include<limits>
using namespace std;
vector<int> find_max_crossing_subarray(vector<int>&A, int low, int mid, int high)
{
vector<int> returnValue;
int left_sum = numeric_limits<int>::min();
int sum = 0;
int max_left = -1;
for (int i = mid; i >= low; --i)
{
sum = sum + A[i];
if (sum > left_sum)
{
left_sum = sum;
max_left = i;
}
}
int right_sum = numeric_limits<int>::min();
int max_right = -1;
sum = 0;
for (int j = mid + 1; j <= high; ++j)
{
sum = sum + A[j];
if (sum > right_sum)
{
right_sum = sum;
max_right = j;
}
}
returnValue.push_back(max_left);
returnValue.push_back(max_right);
returnValue.push_back(left_sum + right_sum);
return returnValue;
}
vector<int> find_maxmum_subarray(vector<int>A, int low, int high)
{
if (high <= low)
{
vector<int> returnValue;
returnValue.push_back(low);
returnValue.push_back(high);
returnValue.push_back(A[low]);
return returnValue;
}
else
{
vector<int>left;
vector<int>right;
vector<int>cross;
int mid = (low + high) / 2;
left = find_maxmum_subarray(A, low, mid);
right = find_maxmum_subarray(A, mid + 1, high);
cross = find_max_crossing_subarray(A, low, mid, high);
if (left[2] >= right[2] && left[2] >= cross[2])
return left;
else if (right[2] >= left[2] && right[2] >= cross[2])
return right;
else
return cross;
}
}
int main()
{
vector<int> num;
int temp = 0;
while (cin >> temp)
{
num.push_back(temp);
}
vector<int>result = find_maxmum_subarray(num, 0, num.size() - 1);
for (unsigned int i = 0; i < result.size(); ++i)
cout << result[i] << " ";
return 0;
}
- 最大子数组问题
- 最大子数组问题
- 最大子数组问题
- 最大子数组问题
- 最大子数组问题
- 最大子数组问题
- 最大子数组问题
- 最大子数组问题
- 最大子数组问题
- 最大子数组问题
- 最大子数组问题
- 最大子数组问题
- 最大子数组问题
- 最大子数组问题
- 最大子数组问题
- 最大子数组问题
- 最大子数组问题
- 最大子数组问题
- 关于catch的异常另一种用法
- 使用Xamarin Forms+XLabs 完成 Camara access
- iOS-UIAlertController简易封装
- 特征降维 理论
- 在相同CDB下进行unplug,plug PDB的操作。(plug or unplug a pdb using same cdb)
- 最大子数组问题
- 利用工厂模式实现怪物系统
- webView在不同接口数据中的使用情况
- pch文件配置
- 顺序表的创建插入与删除
- 林业病虫害预警机制的思考
- ios开发常用知识点总结
- linux学习笔记:网络命令
- 测试文章