• 环一维数组最大子数组问题


    设计思路: 一个含有n个数值的一维环数组。可以把他分为n个一维数组,分别求出这n个以为数组的最大值。然后他这些值放在另一个一维数组中。再比较,求出最大子数组。

    代码:

    package 整数环数组最大子数组的和;
    
    import java.util.Random;
    import java.util.Scanner;
    
    public class one {
    
    public static void main(String[] args) {
    		// TODO 自动生成的方法存根
    
    
    		System.out.print("请输入数组的长度:");
    		Scanner sr=new Scanner(System.in);
    		int num=sr.nextInt();
    		
    		int [] sz =new int[num];
    		long [] max =new long[num];
    		Random a=new Random (num);
    		System.out.println("随机产生的数组为:");
    		for (int i=0;i<num;i++)
    		{
    			sz[i]=a.nextInt(200)-100;
    			System.out.print(sz[i]+" ");
    		}
    		System.out.println();
    		long maxsum=0;
    		long left=0;
    		for(int j=1;j<=num;j++)
    		{
    		maxsum=sz[j-1];
    		left=sz[j-1];
    	
    		for(int l=j;l<num+j-1;l++)
    		{
    			if(left<0)
    			{
    				left=sz[l%num];
    		
    			}
    			else{
    				left+=sz[l%num];
    			
    			}
            System.out.println("left     maxsum   "+left+"          "+maxsum);
            maxsum=getmax(left,maxsum);
            
    		}
    		max[j-1]=maxsum;
    		
    		System.out.println(max[j-1]);
    		}
    		for(int n=0;n<num;n++){
    			maxsum=getmax(max[n],maxsum);
    		}
    		System.out.println("最大子数组的值为:"+maxsum);
    
    	    }
    
    	private static long getmax(long a, long b) {
    		// TODO 自动生成的方法存根
    		
    		return a>b? a:b;
    	
    }
    
    }
    实验截图:
    反思:
    在设计程序中。用了两个for循环,显得有些冗杂。
    将大问题分解成能解决的小问题,是编程的一个重要思路。
    在编程中,一定要注意数组的长度是否与你期望的所一致,避免不必要的调试。

      

  • 相关阅读:
    什么是架构
    jenkins权限插件配置
    解决Error response from daemon: oci runtime error: container_linux.go:247: starting container process
    解决“/tmp/crontab bad minute”问题
    yml链接mysql路径serverTimezone=UTC的那些坑
    java请求头导致特殊字符为空问题
    使用ssh连接WSL
    系统设计与任务分配
    需求规格说明书
    选题报告
  • 原文地址:https://www.cnblogs.com/twentytwo/p/4433973.html
Copyright © 2020-2023  润新知