zoukankan      html  css  js  c++  java
  • 求一个整形数组中最大的子数组的和

      

    输入一个整形数组,数组里有正数也有负数。

    数组中连续的一个或多个整数组成一个子数组,每个子数组都有一个和。

    求所有子数组的和的最大值。要求时间复杂度为O(n)

     

      上课思考了很久,这个问题看似简单,但是在电脑上实现就很难了,需要有一个很好的思维。

      首先,数组得读取存写,读入之后进行求和计算并与原值比较,

      开始的时候,因为题意的不明确(自己转的慢),首先确定几个关键词:连续子数组,和最大,时间复杂度。

      这样,就可以下手了,将连续的数读入一个数组,从第一个数开始,与提前设定好的为零的tempsum相加,不影响,进行比较存储最大值,,进行for循环,直到最后一个数。

     

     public static void main(String[] args) {
                Scanner sc = new Scanner(System.in);
                System.out.print("输入数组个数:");
                int n = sc.nextInt();
                System.out.print("输入数组:");
                int a[] = new int[n*2];         
                for(int i=0; i<n; i++)              
                    {
                    a[i] = sc.nextInt();
                    }
               
                for(int j=0;j<n-1;j++)
                {
                    a[n+j]=a[j];
                }
                sc.close();
                String intArrayString = Arrays.toString(a);
                System.out.println(large(a,n)); 
        }
         private  static int max(int a,int b) {
             if(a>b) return a;
             else return b;
         }
        private  static int large(int a[],int n) {
            int max=a[0];
            int max2=0;      
            for (int i= 0; i<n*2; i++)
            {
            max2=max(max2+a[i],a[0]);   //几个连续最大的值
            max=max(max,max2);    
                 }
            return max;
        }

      代码就是这些代码,还有待改进,在思路上还要更清晰,这只是靠猜测,以及拼运气,没有绝对的信心。

  • 相关阅读:
    net.sf.json.JSONObject maven下载到了但是java后台一直用不了问题
    创建springboot2.1项目运行报错
    百度地图,加载顺序异步问题,用定时器解决
    大话设计模式--(1)简单工厂模式
    H5页面单点登录跳回首页 http url参数转义
    H5页面,百度地图点击事件
    批量给数据两边加上双引号和逗号
    java基础源码 (6)--ArrayListt类
    前端 移动端H5页面 DEBUG
    H5页面,华为手机打开不加载JS的问题
  • 原文地址:https://www.cnblogs.com/msdog/p/10506222.html
Copyright © 2011-2022 走看看