• 最大子数组和


     

    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文件中的这些和,最后筛选出最大值,即为最大子数组和。

    运行结果截图:

  • 相关阅读:
    Prime Land(poj 1365)
    备用交换机(cogs 8)
    救命(洛谷 U4525)
    消息传递(cogs 1001)
    SQLite 使用主键,ROWID 及自增列
    SqlHelper 类
    一个继承的 DataGridView
    给JAVA的eclipse IDE 在线安装 SVN插件 / 给 eclipse 添加打开所在的文件夹功能
    实时更新DataGridView 合计值
    导出为文本格式
  • 原文地址:https://www.cnblogs.com/clueless/p/6649632.html
Copyright © 2020-2023  润新知