• 结对开发之求环形数组的最大值


    结对者:王宏伟

    设计思路:为了实现数组的首尾相连接,则把数组写入两遍,即a[0],a[1],a[2],a[3],a[0],a[1],a[2],a[3]。求子数组最大值从第一个开始遍历到最后一个结束,依次往复向后推进求出子数组的最大值。

    源代码:

    //课堂测试
    //范亚雷 2016.04.11
    //import javax.swing.JOptionPane;
    import java.util.*;
    class Maxout{
        int[] list=new int[100];
        int carmax=0;
        int max;
        int length;
        Maxout(){}
        
        public void Input(){
            System.out.println("请输入数组的长度:");
            Scanner a=new Scanner(System.in);
            
            length=a.nextInt();
            
            if(length==0||length<0)   //数组长度为0,报错
            {System.exit(0);}
            
            Scanner     sca=new Scanner(System.in);
            
            System.out.println("请依次数组内的数:");  //输入
            for(int i=0;i<length;i++)
            {
                list[i]=sca.nextInt();
                list[i+length]=list[i];  //把数组连续写入两次,以实现首尾连接
            }
            
            max=list[0];
            //System.out.println(max);
        }
        
       public void Largest(){    //求最大子数组和
           int start=0;int end=0;
        for(int j=0;j<length*2;j++){
           for(int i=j;i<j+length;i++){
            if(carmax>=0)
                {
                    carmax=carmax+list[i];
                }
            else
                {
                    carmax=list[i];
                    start=i;               
                }
            
            if(max<carmax)
                {
                    max=carmax;
                    end=i;
                }
           }
            carmax=0;
        }
      
        
        
        System.out.println("环子数组的和最大为为:" + max); //输出max
         
      }
       
    }
    
     public class OutMax {
        public static void main(String[] args){
            Maxout m=new Maxout();
            m.Input();
            m.Largest();
        }
    }

    运行截图:

    总结:此次编程浪费了很长的时间,主要是想是想让时间复杂度为最小并且不是转换为求子数组的最小值的解决思路。所以一开始试了很长时间但都没有写成,最终还是选择用复杂的时间复杂度,简单的思路写成了这个程序。

  • 相关阅读:
    计算机网络通信
    javap查看class文件
    JDK动态代理与CGLib动态代理
    error the @annotation pointcut expression is only supported at Java 5 compliance
    redis清空缓存
    利用HttpURLConnection发送请求
    linux下用命令导出mysql表数据
    adb push和pull使用
    mysqld.exe占比cpu 100% 解决方案
    养成好习惯
  • 原文地址:https://www.cnblogs.com/fan-xiaofan/p/5392409.html
Copyright © 2020-2023  润新知