zoukankan      html  css  js  c++  java
  • 最大子数组之和首位相邻32位版

    返回一个整数数组中最大子数组的和,细化分析:
    1,在所有以元素tail结尾的子数组中,选出元素和最大的子数组,tail=1,2...n。
    2,以元素k结尾的和最大的子数组是包含以元素tail-1结尾的和最大的子数组还是就只有元素tail这一个元素,一共有这两个可选状态。

    3,在得到以每个元素结尾的和最大的子数组之后,只要取其中最大值就是所有子数组中最大的子数组。

    4,将数组元素的类型定义为_int32,数组元素随机产生。


    团队成员:王硕   http://home.cnblogs.com/u/WS1004/
    2016.3.25
    #include <iostream> #include <algorithm> #include<time.h> #define RAND16 ((rand()<<1) + (rand()&1)) # define WIDE 4294967296 using namespace std; #define MAX 1000 long long int A[MAX]; long long int Tail[MAX]; // 动态规划思想,时间复杂度O(n) int main() { int length; //数组长度 int i; //循环变量 int tail; //记录数组结束的位置 srand((_int32)time(NULL)); cout<<"please input the length of array:"<<endl; cin >> length; cout<<"随机产生的"<<length<<"个数为"<<endl; for (i=1; i<=length; i++) { A[i]=(RAND16 << 16) + RAND16;//生成32位数组元素 cout<<A[i]<<endl; } // 计算以tail结尾的子数组之和的最大值,即子数组包含第k个数 Tail[1] = A[1]; for (tail=2; tail<=length; tail++) // tail个阶段 { Tail[tail] = max(A[tail],Tail[tail-1]+A[tail]); } // 只有两个状态 // 因为和最大的子数组肯定以某个数结尾,所以取这length个子数组的最大值 long long int All = Tail[1]; for (i=2; i<=length; i++) All = max(All, Tail[i]); cout << "MAX : "<<All<<" !"<<endl; }
    
    

     

    总结:

    通过本次程序设计,我深切体会到了合作的重要性。两个人一起讨论,可以使思维更加活跃,达到1+1>2的效果,继续努力吧!

     
  • 相关阅读:
    凡人修仙登录页面
    proxysql高可用~ keepalived+proxysql
    proxysql 系列 ~ 高可用架构
    mysql 案例 ~timeout相关问题与错误信息
    mysql 案例 ~ mysql字符集与大小写详解
    mysql案例~非常规操作汇总
    mysql原理~创建用户的那些事情
    mysql 案例 ~ 表空间迁移数据与数据导入
    开源统计数据库~行与列的讨论
    mysql 原理 ~ LRU 算法与buffer_pool
  • 原文地址:https://www.cnblogs.com/liyan-luckygirl/p/5323386.html
Copyright © 2011-2022 走看看