zoukankan      html  css  js  c++  java
  • 结对开发求一数组的最大子数组的和

    一、题目:

          返回一个整数数组中最大子数组的和。

      要求:

      1.输入一个整形数组,数组里有正数也有负数。

      2.数组中连续的一个或多个整数组成一个子数组,每个子数组都有一个和。

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

    二、设计思路

      1.先分别求书自数组元素个数为1,2....的数组中最大的一个和

      2.将求出的不同元素个数的数组的最大和组成一个新数组。

      3.求出新数组中的最大数

         4.最后,分别用全正,全负,有正有负的数进行检测。

    三、源代码

    package com.minirisoft;
    
    import java.util.*;
    
    import java.util.*;
    
    class Shuzu
    {
    	public static void main(String[] args)
    	{			
    		Scanner sc=new Scanner(System.in);
    		
    		int[] list = new int[10];//输入数组是必须先定义数组,否则出错!
    		int[] arr1 = new int[9];//输入数组是必须先定义数组,否则出错!
    		int[] arr2 = new int[8];//输入数组是必须先定义数组,否则出错!
    		int[] arr3 = new int[7];//输入数组是必须先定义数组,否则出错!
    		int[] arr4 = new int[6];//输入数组是必须先定义数组,否则出错!
    		int[] arr5 = new int[5];//输入数组是必须先定义数组,否则出错!
    		int[] arr6 = new int[4];//输入数组是必须先定义数组,否则出错!
    		int[] arr7 = new int[3];//输入数组是必须先定义数组,否则出错!
    		int[] arr8 = new int[2];//输入数组是必须先定义数组,否则出错!
    		int[] ma = new int[10];//输入数组是必须先定义数组,否则出错!
    
    		int i=0,sum = 0;
    		System.out.println("请输入数组:");
    		for(int k=0;k<10;k++)
    		{
    			list[k]=sc.nextInt();
    		}
    		int max=list[0];
    		
    		for(i=0;i<10;i++)
    		{
    			if(list[i]>max)
    			{
    				max=list[i];
    			}
    			
    		}
    		ma[0] = max;
    		System.out.println("有1个元素最大子数组的和为"+ma[0]);
    		for(i=0;i<9;i++)
    		{
    			arr1[i] = list[i]+list[i+1];
    		}
    		int max1=arr1[0];
    		for(i=0;i<9;i++)
    		{
    			if(arr1[i]>max1)
    			{
    				max1=arr1[i];
    			}
    		
    		}
    		ma[1]=max1;
    		System.out.println("有2个元素最大子数组的和为"+ma[1]);
    		for(i=0;i<8;i++)
    		{
    			arr2[i] = list[i]+list[i+1]+list[i+2];
    		}
    		int max2=arr2[0];
    		for(i=0;i<8;i++)
    		{
    			if(arr2[i]>max2)
    			{
    				max2=arr2[i];
    			}
    			
    		}
    		ma[2]=max2;
    		System.out.println("有3个元素最大子数组的和为"+ma[2]);
    		for(i=0;i<7;i++)
    		{
    			arr3[i] = list[i]+list[i+1]+list[i+2]+list[i+3];
    			
    		}
    		int max3=arr3[0];
    		for(i=0;i<7;i++)
    		{
    			if(arr3[i]>max3)
    			{
    				max3=arr3[i];
    			}
    			
    		}
    		ma[3] = max3;
    		System.out.println("有4个元素最大子数组的和为"+ma[3]);
    		for(i=0;i<6;i++)
    		{
    			arr4[i] = list[i]+list[i+1]+list[i+2]+list[i+3]+list[i+4];
    		}
    		int max4=arr4[0];
    		for(i=0;i<6;i++)
    		{
    			if(arr4[i]>max4)
    			{
    				max4=arr4[i];
    			}
    			
    		}
    		ma[4] = max4;
    		System.out.println("有5个元素最大子数组的和为"+ma[4]);
    		for(i=0;i<5;i++)
    		{
    			arr5[i] = list[i]+list[i+1]+list[i+2]+list[i+3]+list[i+4]+list[i+5];
    		}
    		int max5=arr5[0];
    		for(i=0;i<5;i++)
    		{
    			if(arr5[i]>max5)
    			{
    				max5=arr5[i];
    			}
    			
    		}
    		ma[5] = max5;
    		System.out.println("有6个元素最大子数组的和为"+ma[5]);
    		for(i=0;i<4;i++)
    		{
    			arr6[i] = list[i]+list[i+1]+list[i+2]+list[i+3]+list[i+4]+list[i+5]+list[i+6];
    		}
    		int max6=arr6[0];
    		for(i=0;i<4;i++)
    		{
    			if(arr6[i]>max6)
    			{
    				max6=arr6[i];
    			}
    			
    		}
    		ma[6] = max6;
    		System.out.println("有7个元素最大子数组的和为"+ma[6]);
    		for(i=0;i<3;i++)
    		{
    			arr7[i] = list[i]+list[i+1]+list[i+2]+list[i+3]+list[i+4]+list[i+5]+list[i+6]+list[i+7];
    		}
    		int max7=arr7[0];
    		for(i=0;i<3;i++)
    		{
    			if(arr7[i]>max7)
    			{
    				max7=arr7[i];
    			}
    			
    		}
    		ma[7] = max7;
    		System.out.println("有8个元素最大子数组的和为"+ma[7]);
    		for(i=0;i<2;i++)
    		{
    			arr8[i] = list[i]+list[i+1]+list[i+2]+list[i+3]+list[i+4]+list[i+5]+list[i+6]+list[i+7]+list[i+8];
    		}
    		int max8=arr7[0];
    		for(i=0;i<2;i++)
    		{
    			if(arr8[i]>max8)
    			{
    				max8=arr8[i];
    			}
    		
    		}
    		ma[8] = max8;
    		System.out.println("有9个元素最大子数组的和为"+ma[8]);
    		for(i=0;i<10;i++)
    		{
    			sum = sum+list[i];
    		}
    		ma[9] = sum;
    		System.out.println("有10个元素最大子数组的和为"+ma[9]);
    
    		int max9=ma[0];
    		for(i=0;i<10;i++)
    		{
    			if(ma[i]>max9)
    			{
    				max9=ma[i];
    			}
    		
    		}
    		System.out.println("最大子数组的和为"+max9);
    	}
    
    }
    

     四、实验结果

    五、心得体会

          做了这么多实验,第一次尝试组队做实验,感觉组队有好有坏吧。好处是能从组员那得到更多的思路,不好的是每个人都有自己的思路,

    当思路不同时还得花时间去相互沟通,没自己做省事。但我感觉应该多练习组队做,毕竟以后工作是团队工作,学会如何更好的和小组沟通合作

    会为自己将来工作打下更好的基础。

    六、小组成员:杨广鑫、郭健豪

  • 相关阅读:
    Linux-Zabbix 邮件报警设置
    CentOS6.7 防火墙规则(Iptables)
    CentOS7 防火墙规则 (firewalld)
    windows搭建代理服务器
    Linux服务器的远程IP限制
    利用shell脚本监控目录内文件改动
    CentOS 7, 升级python到3.x
    CentOS 7, Attempting to create directory /root/perl5
    变长参数表
    C语言预处理
  • 原文地址:https://www.cnblogs.com/tianyaguying/p/4351376.html
Copyright © 2011-2022 走看看