zoukankan      html  css  js  c++  java
  • 最大子数组和

     

    import java.io.BufferedReader;
    import java.io.BufferedWriter;
    import java.io.File;
    import java.io.FileReader;
    import java.io.FileWriter;
    import java.io.IOException;
    import java.util.Scanner;
    
    
    public class MaxSubArray {
    
        /**
         * @param args
         * @throws IOException 
         */
        public static void main(String[] args) throws IOException {
            // TODO Auto-generated method stub
    
            Scanner in=new Scanner(System.in);
            int n;
            System.out.println("输入数组元素个数");
            n=in.nextInt();
            int []array=new int[n];
            System.out.println("输入数组元素");
            for(int i=0;i<n;i++)
            {
                array[i]=in.nextInt();
            }
            int []doubleArray=new int[2*n];
            for(int i=0;i<n;i++)
            {
                doubleArray[i]=array[i];
            }
            for(int j=0;j<n;j++)
            {
                doubleArray[j+n]=array[j];
            }
            //验证doubleArray在排列上是否为array数组*2
            /*for(int m=0;m<2*n;m++)
            {
                System.out.print(doubleArray[m]);
            }*/
            
            //列举所有子数组和
            System.out.println("子数组的和为:");
            File file=new File("max.txt");
            FileWriter fw=new FileWriter(file);
            int max=0;
            for(int i=0;i<n;i++)
            {
                int flag=0;
                for(int j=i;j<2*n;j++)
                {
                    
                    max=max+doubleArray[j];
                    flag++;
                    System.out.print(max+" ");
                    fw.write(max+"
    ");//所有子数组的和写入max文件
                    if(flag==n)//达到数组最大长度跳出循环
                        break;
                }
                max=0;//归零
                System.out.println();
            }
            fw.close();
            System.out.println();
            //读取max文件子数组和并获取最大值
            FileReader fr=new FileReader("max.txt");
            BufferedReader br=new BufferedReader(fr);
            int[]GetMax=new int[n*n];
            String line;
            int j = 0;
            while((line=br.readLine())!=null)
            {
                GetMax[j++]=Integer.parseInt(line);    
            }
            br.close();
            int SubMax=GetMax[0];
            for(int i=0;i<n*n;i++)
            {
                if(GetMax[i]>SubMax)
                    SubMax=GetMax[i];
            }
            System.out.println("子数组和最大值为"+SubMax);
        }
    
    }

    设计思路:

    DoubleArray数组等于两个Array数组,相当于将Array数组弄成一个掰直的头尾相连的数组。按Array中元素顺序开始向后累加DoubleArray数组的元素,直到达到Array的长度n,生成所有子数组的和。再把这些和写入文件max,用GetMax数组读取max文件中的这些和,最后筛选出最大值,即为最大子数组和。

    运行结果截图:

  • 相关阅读:
    Informix IDS 11系统办理(918考试)认证指南,第6部分:IDS备份和恢复(1)
    Informix IDS 11体系处置(918检验)认证指南,第 4 局部: 性能调优(7)
    我常用网址整理
    System.Insert 插入字符串
    System.Length 获取字符串或数组的长度
    System.New、System.Dispose 为某个指针申请和释放内存
    System.GetMem、System.FreeMem 申请和释放内存
    学习 TList 类的实现[1]
    学习 TList 类的实现[2]
    System.ReallocMem 重新申请内存
  • 原文地址:https://www.cnblogs.com/clueless/p/6649632.html
Copyright © 2011-2022 走看看