最大数组BT

一、题目:返回一个整数组中的最大子数组的和(加强版)

二、课题要求:

要求程序能够处理1000个元素;

没个元素是int32类型的;

输入一个整形数组,数组里有正数也有负数;

数组中连续的一个或多个整数组成一个子数组,没个子数组都有一和;

求所有子数组的和的最大值,要求时间复杂度为O(n)。

三、设计思路

把数组定义为1000个元素,并定义为int32类型,当我们需要越界时需要将数组整体乘上2^32=4294967296。

四、程序代码

#include <iostream>
 #include<stdlib.h>
 #include<time.h>
 using namespace std;

 int main()
 {
     int i;
    int a[1000];
     int max = 0;
     int b = 0;

    srand(time(NULL));
     cout<<"生成整数组:"<<endl;
    for (i = 0; i<1000; i++)
     {
         a[i] = rand();
     }
     for (i = 0; i<1000; i++)
     {
         cout << a[i] << ‘\t‘;
     }
     cout << endl;

     for (i = 0; i < 1000; i++)
     {
         b += a[i];
         if (b < 0)
             b = 0;
         if (b > max)
             max = b;
     }
     if (max == 0)
     {
         max = a[0];
         for (i = 0; i < 1000; i++)
         {
             if (max < a[i])
             {
                max = a[i];
             }
         }
     }
     cout <<"最大子数组:"<< max << endl;
     return 0;
 }

当需要越界时,数组乘4294967296

a[i] = rand()*4294967296;

五、运行结果

①正常运行

②越界运行

六、收获总结

经过这次课题设计,对计算机算法又有了一个深层次的认识,通过for语句循环,以及if语句判断是否符合程序需求。

七、时间记录日志

八、组员图片

组员博客:姬浩桐:http://www.cnblogs.com/hyjht/

组员博客:祁    军:http://www.cnblogs.com/qijun1120/

原文地址:https://www.cnblogs.com/hyjht/p/9787501.html

时间: 2024-10-15 16:48:35

最大数组BT的相关文章

struts2实现文件查看、下载

CreateTime--2017年9月7日10:25:33 Author:Marydon 1.界面展示 <a style="color: #199ED8;" target="_blank" href="<c:url value="/telemedicine/reseCons/viewFile.do?fileName=201516529IO.jpg"/>">查看</a> <a style

FileStream 常用的属性和方法

FileStream常用的属性和方法 (转) 对流进行操作时要引用 using System.IO; 命名空间 FileStream常用的属性和方法: 属性: CanRead 判断当前流是否支持读取,返回bool值,True表示可以读取 CanWrite 判断当前流是否支持写入,返回bool值,True表示可以写入 方法: Read() 从流中读取数据,返回字节数组 Write() 将字节块(字节数组)写入该流 Seek() 设置文件读取或写入的起始位置 Flush() 清除该流缓冲区,使得所有

FileStream常用的属性和方法 (转)

对流进行操作时要引用 using System.IO; 命名空间 FileStream常用的属性和方法: 属性: CanRead 判断当前流是否支持读取,返回bool值,True表示可以读取 CanWrite 判断当前流是否支持写入,返回bool值,True表示可以写入 方法: Read() 从流中读取数据,返回字节数组 Write() 将字节块(字节数组)写入该流 Seek() 设置文件读取或写入的起始位置 Flush() 清除该流缓冲区,使得所有缓冲的数据都被写入到文件中 Close() 关

【poj1901-求区间第k大值(带修改)】树状数组套主席树

901: Zju2112 Dynamic Rankings Time Limit: 10 Sec  Memory Limit: 128 MBSubmit: 7025  Solved: 2925[Submit][Status][Discuss] Description 给定一个含有n个数的序列a[1],a[2],a[3]--a[n],程序必须回答这样的询问:对于给定的i,j,k,在a[i],a[i+1],a[i+2]--a[j]中第k小的数是多少(1≤k≤j-i+1),并且,你可以改变一些a[i]

java 中byte[] 数组的合并

因工作的需要,在从事 .Net 的开发中接触到了 Java, 虽然在大学的时候学过一段Java 编程,但并没有在实际的工作中使用过, Java 和 .Net的C#语法很相似,都是面向对象的,感觉在语法上只有些细微的差异,这里主要介绍以下,将两个数组合并成的操作,废话不多说,直接上代码: //System.arraycopy()方法 public static byte[] byteMerger(byte[] bt1, byte[] bt2){ byte[] bt3 = new byte[bt1.

剑指offer-把数组排成最小的数

题目描述 输入一个正整数数组,把数组里所有数字拼接起来排成一个数,打印能拼接出的所有数字中最小的一个.例如输入数组{3,32,321},则打印出这三个数字能排成的最小数字为321323. 题解: 利用sort函数的cmp功能,实现将组合成的数字最小到最大的方式排列 bool Cmp(int a, int b){ int a_num = 0, b_num = 0, at = a, bt = b; while(at){ a_num++; at /= 10; } while(bt){ b_num++;

C++ 中数组做参数的分析

C++ 中数组做参数的分析 1.数组降价问题? "数组引用"以避免"数组降阶",数组降阶是个讨厌的事,这在C语言中是个无法解决的问题,先看一段代码,了解什么是"数组降阶" 1 #include <IOSTREAM> 2 using namespace std; 3 4 void Test( char array[20] ) 5 { 6 cout << sizeof(array) << endl; // 输出 4

.Net常用技巧_解压缩byte数组

1,需要引用命名空间 using System.IO.Compression; 2, //压缩byte数组方法 private byte[] ComPress(byte[] data) { try { MemoryStream ms = new MemoryStream(); Stream zipStream = null; zipStream = new GZipStream(ms, CompressionMode.Compress, true); zipStream.Write(data,

树状数组laekov

lowbit 数组的第 i 位存储的是以 i 为结尾的长度为lowbit(i) 的一段的和. int lowBit(x) { return x & -x; } 加点 int n, bt[maxn]; void btAdd(int pos, int delta) { for (; pos <= n; pos += lowBit(p)) { bt[pos] += delta; } } 查询 int btSum(int pos) { int ans = 0; for (; pos; pos -=