zoukankan      html  css  js  c++  java
  • 求元素和最大的子数组2

    1.题目要求:由一中的链状数组变为环状数组

    2.编程思路:

    若数组为环状,将其从a[0]出断开,本质和一条链相同,只不过以前只能按顺序从前面往后相加,环状之后能够从尾部加到头部,所以只需要将此数组长度变为2倍,后面一半的数组元素与前面相同,然后即可按照前面所写的链状相同,只需要在while循环中加上一个限定条件:相加最大数组长度小于二分之一数组长度 即可。

    3.源程序:

    public class Max2 {
    	public static void main(String [] args){
    		int a[]={2,4,3,-9,9,9,-1};
    		int b[]=new int[100];
    		int n=a.length;
    		for(int i=0;i<n;i++){
    			b[i]=a[i];
    			b[i+n]=a[i];
    		}
    		
    		int Max[]=new int[10];
    		Max[0] = 0;
    		int i = 0;//数组下标
    		int j = 0;//最大值数组下标
    		int temp=0;//中间变量
    		int q=1;//用于连续长度的计数
    		while(q<a.length&&i<b.length){			    
    				if(temp+b[i]>=Max[j])
    				{
    					temp=temp+b[i];
    					Max[j]=temp;
    					i++;
    					q++;
    				}
    				else if(temp+b[i]<Max[j]&&temp+b[i]>0)
    				{
    					temp=temp+b[i];
    					i++;
    					q++;
    				}
    				else if(temp+b[i]<=0)
    				{
    				   i++;	
    				   j++;
    				   Max[j]=0;
    				   temp=0;
    				   q=1;
    				}
    			
    		}
    		int max = Max[0];
    		for(int k=0;k<=j;k++){
    			if(Max[k]>max)
    			{
    				max=Max[k];
    			}
    		}
    		/*System.out.println(j);
    		for(int k=0;k<=j;k++){
    			System.out.println(Max[k]);
    		}*/
    		System.out.println("最大子数组和为"+max);
    	}
    
    }
    

    4.运行结果截图:

    学会改变,举一反三,你就能成为智者!

     

  • 相关阅读:
    多值参数
    TK图形界面
    匿名函数
    try -catch-finally一些要点
    C#枚举类型转换
    Linux下查看MySQL的安装路径
    linux安装oracle 报错[INS-20802] Oracle Net Configuration Assistant failed 解决办法
    suse-Linux下安装Oracle11g服务器
    window7 下安卓开发环境搭建
    学习Linux最简单的方法
  • 原文地址:https://www.cnblogs.com/xulei11-/p/6641459.html
Copyright © 2011-2022 走看看