資料結構與演算法——給定整數A1,A2,....An,....(可能有負數),求該資料序列的最大子序列的和
求最大的子序列和問題
給定整數A1,A2,....An,....(可能有負數),求該資料序列的最大子序列的和。比如:輸入-2, 11, -4, 13, -5, -2; 答案是20(11,-4,13三個連續數字的和)
我們遍歷一次資料序列,當每次的this_sum大於最大值的時候就更新max_sum的值。當this_sum小於0的時候,就把它置為0,再從當前位置開始計算(每次求和的結果小於0,就從下一個資料開始求和)。還有一點要清楚,最大序列的第一個數字不可能小於0。可以看出該演算法的時間複雜度是O(n);
該問題還有其它幾種時間複雜度比較高的演算法。具體看:資料結構與演算法分析C++描述(2.3章節)
/*************************************************************************
> File Name: max_seq_sum.cpp
> Author:
> Mail:
> Created Time: 2016年01月05日 星期二 19時49分30秒
************************************************************************/
#include<iostream>
#include <vector>
using namespace std;
void input_data(vector<int> & data)
{
int tmp;
cout << "輸入資料序列:" << endl;
while(cin >> tmp){
data.push_back(tmp);
}
}
void output_data(vector<int> & data)
{
cout << "輸入的資料序列:" << endl;
for (int i = 0; i < data.size(); ++i)
cout << data[i] << " ";
cout << endl;
}
int max_seq_sum(vector<int> & data)
{
int max_sum = 0, this_sum = 0;
for (int i = 0; i < data.size(); ++i){
this_sum += data[i];
if(this_sum > max_sum)
max_sum = this_sum;
else if(this_sum < 0)
this_sum = 0;
}
return max_sum;
}
int main()
{
vector<int> data;
//輸入資料
input_data(data);
output_data(data);
cout << "最大序列的值是: ";
cout << max_seq_sum(data) << endl;
return 0;
}
相關文章
- 資料結構與演算法分析(c 語言描述)最大子序列和問題資料結構演算法
- 習題2.4 遞增的整數序列連結串列的插入 (15分) 浙江大學資料結構資料結構
- 資料結構與演算法---螺旋矩陣、整數反轉資料結構演算法矩陣
- 最長公共子序列求方案數
- 資料結構與演算法——兩個大整數的乘積問題資料結構演算法
- Redis資料結構之整數集合Redis資料結構
- Redis資料結構—整數集合與壓縮列表Redis資料結構
- [-演算法篇-] 最大子序列和演算法
- python序列資料型別之序列資料的基本操作Python資料型別
- python 資料結構之順序列表的實現Python資料結構
- 對資料結構和演算法的總結和思考(六)--計數排序資料結構演算法排序
- python資料結構——連結串列(無序列表)Python資料結構
- 資料結構與演算法——排序演算法-基數排序資料結構演算法排序
- 好題——數學與資料結構資料結構
- 資料結構與演算法-資料結構(棧)資料結構演算法
- 序列資料探勘
- 時間序列資料的定義,讀取與指數平滑(Java)Java
- 圖解Redis之資料結構篇——整數集合圖解Redis資料結構
- 資料結構實驗之連結串列八:Farey序列資料結構
- 給定json資料,將資料與頁面結構進行繫結JSON
- 整數序列環形佇列佇列
- 前端你應該瞭解的資料結構與演算法前端資料結構演算法
- 一文了解開放資料架構和時間序列資料架構
- python演算法與資料結構-演算法和資料結構介紹(31)Python演算法資料結構
- 資料結構和演算法面試題系列—數字題總結資料結構演算法面試題
- 前端該如何準備資料結構和演算法?前端資料結構演算法
- 資料結構:順序結構和鏈式結構的資料型別定義資料結構資料型別
- JavaScript 的資料結構和演算法JavaScript資料結構演算法
- Java的資料結構和演算法Java資料結構演算法
- 引數為二叉樹和一個整數,求所有和為該整數的路徑二叉樹
- 資料結構:初識(資料結構、演算法與演算法分析)資料結構演算法
- 演算法題:乘積最大子序列演算法
- 673. 最長遞增子序列的個數
- 資料結構中常用的數學公式資料結構公式
- 【資料結構與演算法】非比較排序(計數排序、桶排序、基數排序)資料結構演算法排序
- 資料的序列化&持久化持久化
- 時間序列資料的處理
- 高效的序列化/反序列化資料方式 Protobuf