数组问题之求最大子数组问题(一)

结束了 四则运算的所有内容 这次老师布置了 数组问题 求最大子数组的问题 课堂上 老师就已经提供了数种方案 并提出了时间复杂度的要求 于是和我的搭档找到了认为最为简便的算法

过程中和小于0,那么和最大的子数组不会包含前面子数组,之后将和归0,从下个元素重新开始计算

于之前的实验 理清思路 代码实现不算太难

代码如下

 1 #include<iostream>
 2 using namespace std;
 3
 4 int main()
 5 {
 6     int i,num;
 7     cout << "请输入数组元素个数: " ;
 8     cin >> num;
 9     int *arr = new int[num];
10     cout << "请依次输入数组元素" << endl;
11     for (i = 0; i < num; i++)
12     {
13         cin >> arr[i];
14     }
15     int MaxSum = 0;
16     int CurSum = 0;
17     for (i = 0; i<num; i++)
18     {
19         CurSum += arr[i];
20         if (CurSum > MaxSum)
21         {
22             MaxSum = CurSum;
23         }
24         if (CurSum < 0)
25         {
26             CurSum = 0;
27         }
28     }
29     cout <<"该数组中最大子数组的和是: "<< CurSum<<endl;
30     system("pause");
31
32     return 0;
33 }

经验证结果正确!

时间: 2024-12-24 22:21:39

数组问题之求最大子数组问题(一)的相关文章

一维数组头尾相连求最大子数组

题目: 返回一个整数数组中最大子数组的和. 要求: 输入一个整形数组,数组里有正数也有负数. 数组中连续的一个或多个整数组成一个子数组,每个子数组都有一个和.如果数组A[0]……A[j-1]首尾相邻,允许A[i-1], …… A[n-1], A[0]……A[j-1]之和最大. 同时返回最大子数组的位置. 求所有子数组的和的最大值.要求时间复杂度为O(n). 1. 设计思想: 因为已经写过了一维数组的求最大子数组程序.所以只是在原程序上进行修改.首先产生随机数数组,然后进行计算,因为要求时间复杂度

二维数组求最大子数组

设计思路: 首先定义产生二维数组,定义可输入二维数组行和列,各位数随机产生: 然后进行最大子数组的求和比较,从每行的第一个数为子数组的起点开始进行不同的子数组遍历比较,只存放最大的子数组,以及记录最大子数组的位置,从第一个数开始每行每列进行求和比较,以求得最大子数组的值,以及最大子数组所包含的数: 最后进行结果的输出与验证. 代码: 法一: package zishuzu; import java.util.*; public class zuixiaozishuzu { public stat

一维数组求最大子数组(解决溢出问题)

一.题目要求 题目:返回一个整数数组中最大子数组的和. 要求: 要求程序必须能处理1000 个元素: 每个元素是int32 类型的: 输入一个整形数组,数组里有正数也有负数. 数组中连续的一个或多个整数组成一个子数组,每个子数组都有一个和. 求所有子数组的和的最大值.要求时间复杂度为O(n). 二.设计思想 程序在宏里面定义出了数组长度的大小,在长度超过100万的时候程序直接崩溃,其实这并不是因为结果太大导致的数值溢出,而是因为内存溢出,我们的数组是定义在程序内部的,属于局部变量,存放位置在栈上

三种方法求最大子数组的和

这是一道考的烂的不能再烂的题目,但是依然有很多公司乐于将这样的题目作为笔试或面试题,足见其经典. 问题是这样的:一个整数数组中的元素有正有负,在该数组中找出一个连续子数组,要求该子数组中各元素的和最大,这个子数组便被称作最大子数组.比如数组{2,4,-7,5,2,-1,2,-4,3}的最大子数组为{5,2,-1,2},最大子数组的和为5+2-1+2=8. 下面按照时间复杂度逐步优化的顺序依次给出这三种算法. 暴力求解法 该方法的思想非常简单,先找出从第1个元素开始的最大子数组,而后再从第2个元素

结对开发--四实现循环二维数组求最大子数组的和

一.实现思路 再上一个实验基础上加上环,我们实现环的思想是每一列依次向此替换,直至替换出能出现的所有的二维数组,再用上一个求最大子数组的方法全部实现 二.实验代码 package com.minirisoft; import java.io.BufferedReader; import java.io.File; import java.io.FileReader; import java.util.Scanner; public class HuanTwoArray { public stat

课堂作业:首尾相连求最大子数组

1.设计思想 先将数组环拆解补在原来数组后面,再依次找子数组并相加,更新最大值,并需要将开始的负数舍去从正数开始算起,单独讨论全负情况. 2.源程序 package zishuzu; import java.util.Scanner; public class zsz { public static void main(String[] args) { System.out.println("请输入数字个数:"); Scanner in=new Scanner(System.in);

结对——二维数组首尾相连求最大子数组和

一.题目与要求 题目.返回一个二维整数数组中最大子数组的和 要求.1.输入一个二维整形数组,数组里有正数也有负数. 2.二维数组首尾相接,象个一条首尾相接带子一样. 3.数组中连续的一个或多个整数组成一个子数组,每个子数组都有一个和 二.设计思路 在上一次的以为循环数组的基础上,和二维数组求最大子数组相结合,将功能合并,完成题目要求. 第一步.将每一行的数组作为循环数组求最大子数组 第二步.通过枚举的方式,将每一种情况的和存入到新建二维数组中 第三部.通过逐列计算最大子数组的方法求所有子矩阵的最

循环一维数组求最大子数组

题目: 随机出一个一维数组,设该数组为循环数组,求其最大小子数组. 一.设计思路 求最大子数组,就求出最大的连续正子数组. 将数组分为全负和有非负值两种情况.全负求出最大值即可. 在有非负值的情况下,先判断该随机数组的首尾是否相连,即首尾是否都大于等于零.如果首尾相连,则将该一维数组分为首.中.尾三部分,先求出首尾和S1,再求中间最大连续正子数组和S,令S1和S与maxS相比较,求出最大子数组:如果首尾不相连,则直接借鉴前一种情况中部的算法,求最大正子数组S. 二.源代码 1 //刘双渤,刘洪阳

环形数组求最大子数组之和

环形数组求最大子数组之和: 实验要求: 随机产生一个整形数组,假设首尾相连为环形,求其相连的字数组的和,并输出子数组的元素. 设计思路: 因为是环形,所以要考虑自设的头尾的情况,在此分为两大类考虑,一种为数组中存在正数情况,一种为全部为负数的情况: 在存在正数的情况中又可分为三种情况,一种为全部为正数的情况,一种为自设的头元素为正数,最后一种为自设的头元素为负数.根据这几种情况分类进行实现. 在实现过程中,对数组元素从头到尾进行遍历,如果遇到正数即用和相加,直到相邻的下一个为负数,即存放目前该最