Ai
1 Star 0 Fork 0

孙思姣/secondwarehouse

加入 Gitee
与超过 1200万 开发者一起发现、参与优秀开源项目,私有仓库也完全免费 :)
免费加入
文件
该仓库未声明开源许可证文件(LICENSE),使用请关注具体项目描述及其代码上游依赖。
克隆/下载
shuzu.cpp 3.98 KB
一键复制 编辑 原始数据 按行查看 历史
孙思姣 提交于 2020-03-11 20:21 +08:00 . shuzu.cpp
#include<iostream>
#include<cstdlib>
using namespace std;
int getmax(int array[],int length)
{
int sum = 0; //记录当前连续子数组的最大和
int max = 0; //记录当前数组连续几个元素的和(当其值小于0时,重新对其赋值;【即:抛弃前面的所有元素】)
int startIndex = 0; //记录子数组(和最大)的起始位置
int endIndex = 0; //记录子数组(和最大)的终止位置
int newStartIndex = 0; //记录子数组(和最大)的新的起始位置
for (int i = 0; i < length; i++) //遍历整个目标数组
{
if (max < 0) //如果max < 0;则要对max重新赋值
{
max = array[i]; //对max重新赋值
newStartIndex = i; //暂时记录子数组(和最大)的新的起始位置(要看后续的sum 和 max是否发生交换)
}
else
{
max += array[i]; //如果max >= 0;则要继续将此时的数组元素(array[i])加入到max中
}
if (sum < max) //如果此时 sum < max;则表示此时的子数组和大于之前的子数组和
{
sum = max; //将大的子数组和max赋值给sum
startIndex = newStartIndex; //子数组(和最大)的新的起始位置起作用了
endIndex = i; //子数组(和最大)的终止位置(只要发生交换就说明endIndex发生变化)
}
}
return max;
}
int getstartIndex(int array[],int length)
{
int sum = 0; //记录当前连续子数组的最大和
int max = 0; //记录当前数组连续几个元素的和(当其值小于0时,重新对其赋值;【即:抛弃前面的所有元素】)
int startIndex = 0; //记录子数组(和最大)的起始位置
int endIndex = 0; //记录子数组(和最大)的终止位置
int newStartIndex = 0; //记录子数组(和最大)的新的起始位置
for (int i = 0; i < length; i++) //遍历整个目标数组
{
if (max < 0) //如果temp < 0;则要对temp重新赋值
{
max = array[i]; //对max重新赋值
newStartIndex = i; //暂时记录子数组(和最大)的新的起始位置(要看后续的sum 和 max是否发生交换)
}
else
{
max += array[i]; //如果max >= 0;则要继续将此时的数组元素(array[i])加入到max中
}
if (sum < max) //如果此时 sum < max;则表示此时的子数组和大于之前的子数组和
{
sum = max; //将大的子数组和max赋值给sum
startIndex = newStartIndex; //子数组(和最大)的新的起始位置起作用了
endIndex = i; //子数组(和最大)的终止位置(只要发生交换就说明endIndex发生变化)
}
}
return startIndex;
}
int getendIndex(int array[],int length)
{
int sum = 0; //记录当前连续子数组的最大和
int max = 0; //记录当前数组连续几个元素的和(当其值小于0时,重新对其赋值;【即:抛弃前面的所有元素】)
int startIndex = 0; //记录子数组(和最大)的起始位置
int endIndex = 0; //记录子数组(和最大)的终止位置
int newStartIndex = 0; //记录子数组(和最大)的新的起始位置
for (int i = 0; i < length; i++) //遍历整个目标数组
{
if (max < 0) //如果max < 0;则要对max重新赋值
{
max = array[i]; //对max重新赋值
newStartIndex = i; //暂时记录子数组(和最大)的新的起始位置(要看后续的sum 和 max是否发生交换)
}
else
{
max += array[i]; //如果max >= 0;则要继续将此时的数组元素(array[i])加入到max中
}
if (sum < max) //如果此时 sum < max;则表示此时的子数组和大于之前的子数组和
{
sum = max; //将大的子数组和max赋值给sum
startIndex = newStartIndex; //子数组(和最大)的新的起始位置起作用了
endIndex = i; //子数组(和最大)的终止位置(只要发生交换就说明endIndex发生变化)
}
}
return endIndex;
}
int main()
{
int length,i=0;
cout<<"请输入个数:";
cin>>length;
cout<<"请输入数组:";
int array[1000]={0};
for(i=0;i<length;i++)
{
cin>>array[i];
}
cout<<"最大子数组的和为:"<<getmax(array,length)<<endl;
cout<<"最大子数组起始下标:"<<getstartIndex(array,length)<<endl;
cout<<"最大子数组结束下标:"<<getendIndex(array,length)<<endl;
system("pause");
return 0;
}
Loading...
马建仓 AI 助手
尝试更多
代码解读
代码找茬
代码优化
C++
1
https://gitee.com/sun_si_jiao/secondwarehouse.git
git@gitee.com:sun_si_jiao/secondwarehouse.git
sun_si_jiao
secondwarehouse
secondwarehouse
master

搜索帮助