• 环状数组求最大子数组


    思路就是在非环状的基础上,将数组扩大两倍,然后利用原来的方法进行寻找。

    本程序代码是从文件中读取数字,然后进行寻找。

    下面这段代码是文件读取的代码,其中加了一个自定义的异常处理,增强文件的健壮性。

    package diyizhou;  
      
    import java.io.File;  
    import java.io.InputStreamReader;
    import java.math.BigDecimal;
    import java.io.BufferedReader;  
    import java.io.BufferedWriter;  
    import java.io.FileInputStream;
    import java.util.Arrays;
    import java.util.List;
    import java.util.Scanner;
    import java.util.StringTokenizer;
    
    
    
    import java.io.FileWriter;  
      
    
    
    
    class MyException extends Exception
    {
        public MyException(String Message) {
            super(Message);
        }
        public MyException(String message, Throwable cause) {
            super(message, cause);
        }
         public MyException( Throwable cause) {
            super(cause);
        }
    
    }
    
    
    public class cin_txt {  
        
        
        public static void throwExceptionMethod() throws MyException
           {
              
              try {
                // System.out.println( "Method throwException" );
                 // System.out.println(11111);
                 throw new Exception("内容不规范");  // 产生了一个特定的异常
              }
              catch( Exception e )
              {
                  //System.out.println("2222");
                  System.err.println(e.getMessage());
                  //throw new MyException("NotSanjiaoException2");
                
                 
              }
              
    
              // any code here would not be reached
           }
        
        
        public static void duqu(String lujing)
        {
            int num[]=new int[10000];
            String s="";
            int i=0;
            try { // 防止文件建立或读取失败,用catch捕捉错误并打印,也可以throw  
      
                /* 读入TXT文件 */  
                String pathname = lujing; // 绝对路径或相对路径都可以,这里是绝对路径,写入文件时演示相对路径  
                File filename = new File(pathname); // 要读取以上路径的input。txt文件  
                InputStreamReader reader = new InputStreamReader(  
                        new FileInputStream(filename));
                BufferedReader br = new BufferedReader(reader);  
                String line = "";  
                line = br.readLine();  
                while (line != null) {  
                    
                    StringTokenizer st2 = new StringTokenizer(line, ",");
                    while (st2.hasMoreElements()) {
                        s=String.valueOf(st2.nextElement());
                        try
                        {
    
                            num[i]=Integer.parseInt(s);
                            i++;
                        }
                        catch(Exception e)
                        {
                            try {
                                throwExceptionMethod();
                            } catch (MyException e1) {
                                // TODO Auto-generated catch block
                                e1.printStackTrace();
                            }
                            System.exit(0);
                        }
                        
                        
                    }
                   // System.out.println();
                    
                    //System.out.println("**********");
                    //System.out.println(line);
                    line = br.readLine(); // 一次读入一行数据 
                }  
      
              
      
            } catch (Exception e) {  
                e.printStackTrace();  
            }
            
           xunhuanshuzu.huan(num,i);
            
        }
     
    }  

    接下来是处理数字的源程序代码

    package diyizhou;
    
    import java.util.Scanner;
    
    public class xunhuanshuzu {
        
        
        public static void main(String[] args) {
            cin_txt.duqu("E:\txt.txt");
        }
        public static void huan(int[] a,int n)
        {
            for(int i=0;i<n;i++)
            {
                a[i+n]=a[i];
            }
            Jisuan(a,n);
        }
        
        public static void Jisuan(int[] a,int n)
        {
            int mmax=a[0];
            int s=-100000;
            for(int i=0;i<n;i++)
            {
                System.out.println(a[i]);
                s=-1000;
                for(int j=i;j<n+i;j++)
                {
                    s+=a[j];
                    if(s>mmax)
                    {
                        mmax=s;
                    }
                    if(s<0)
                    {
                        s=a[j];
                    }
                }
                
            }
            System.out.println("mmax="+mmax);
        }
    
    }

    接下来附上两张运行结果

    分别是正常规范的文件和不规范的文件的运行的结果图。

  • 相关阅读:
    浏览器 cookie
    c# 委托
    并不对劲的loj3106:p5339:[TJOI2019]唱、跳、rap 和篮球
    并不对劲的loj3095:p5329:[SNOI2019]字符串
    并不对劲的CF1365D&E&F: Solve The Maximum Subsequence Again
    并不对劲的loj3123:p5404[CTS2019]重复
    并不对劲的loj3046:p5327:[ZJOI2019]语言
    并不对劲的loj3115:p5362:[SDOI2019]连续子序列
    并不对劲的loj3113:p5360:[SDOI2019]热闹的聚会与尴尬的聚会
    并不对劲的bzoj2521:p5039:[SHOI2010]最小生成树
  • 原文地址:https://www.cnblogs.com/yizhixiaozhu/p/12377263.html
Copyright © 2020-2023  润新知