• 返回一个整数数组中最大子数组的和(补充:输出该子数组)


    昨天的只是输出了最大子数组的和,在上次的基础上改进使得能够输出该子数组。

    //求数组中最大子序列的和  王世强 2016/3/23 
    #include<iostream>
    using namespace std;
    int main()
    {
    	int Array[100],i=1,dp[100][2],s,e,MaxSum;
    	int s0=-1,e0=-1,s1=0,e1=0;
    	cout<<"请输入一组数组:";
    	cin>>Array[0];
    	while(getchar()!='
    ')   //输入数组部分,空格表示输入结束 
    	{
    		cin>>Array[i++];
    	}
    	dp[0][0]=0;
    	dp[0][1]=Array[0];
    	for(int j=1;j<i;j++)
    	{
    		if(dp[j-1][0]<dp[j-1][1])
    		{
    			dp[j][0]=dp[j-1][1];
    			s0=s1,e0=e1;
    		}
    		else
    		{
    			dp[j][0]=dp[j-1][0];
    		}
    		if(Array[j]<(dp[j-1][1]+Array[j]))
    		{
    			dp[j][1]=dp[j-1][1]+Array[j];
    			e1=j;
    		}
    		else
    		{
    			dp[j][1]=Array[j];
    			s1=e1=j;
    		}
    	}
    	if(dp[i-1][0]>dp[i-1][1])
    	{
    		MaxSum=dp[i-1][0];
          	s=s0;
     		e=e0;
    	}
    	else
    	{
            MaxSum=dp[i-1][1];
    		s=s1;
     		e=e1;
    	}	
    	cout<<"最大子数组为和:"<<MaxSum<<"
    最大子数组为:";
    	for(int q=s;q<=e;q++)
    	{
    		cout<<Array[q]<<" ";;
    	}
    	return 0;
     } 
    

      在每一次的比较中加入头和尾的指定,s为最大子数组的头,e为最大子数组的尾。

    结果截图如下:

  • 相关阅读:
    团队与领导力健康检查 | 体检表
    如何改变组织文化
    如何在各种文化背景下成功敏捷
    OKR痛点与误区 | 敏捷家分享007
    Scrum培训感想
    如何讲好故事
    Lc70_爬楼梯
    Lc641_设计循环双端队列
    Lc32_最长有效括号
    Lc239_滑动窗口最大值
  • 原文地址:https://www.cnblogs.com/wsqJohn/p/5310228.html
Copyright © 2020-2023  润新知