zoukankan      html  css  js  c++  java
  • 环一维数组最大子数组问题

    设计思路: 一个含有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循环,显得有些冗杂。
    将大问题分解成能解决的小问题,是编程的一个重要思路。
    在编程中,一定要注意数组的长度是否与你期望的所一致,避免不必要的调试。

      

  • 相关阅读:
    Shell 字符串处理
    Shell 变量替换及测试
    ARTS(一)
    instanceof & isAssignableFrom的异同
    mysql 分组排序取最值
    guava-retrying 源码解析(阻塞策略详解)
    guava-retrying 源码解析(时间限制策略)
    guava-retrying 源码解析(停止策略详解)
    guava-retrying 源码解析(等待策略详解)
    guava-retrying 源码解析(导入项目)
  • 原文地址:https://www.cnblogs.com/twentytwo/p/4433973.html
Copyright © 2011-2022 走看看