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

    程序设计思想:

    思路:
    因为时间复杂度为O(n),则只能遍历一次数组
    这里同时使用两个变量sum和max,其中sum保存的是当前的和,若sum<0
    则从下一个位置从新记录,max记录的是历史的最大值
    只有当sum>max时用sum替换max。

    出现的问题:

    在初始化max和sum的值时,把max初始化成了0,sum的值初始化成了数组的而第一个元素的值。

    可能的解决方法:

    应该把max的值初始化成数组的第一个元素的值,把sum的值初始化成0;

    源代码:

    public class IntArrayMax {
        
        public static void  MaxIntArray(int[] intArray) {
        
    
            int sum=0;
            int max=intArray[0];
            for(int i=0;i<intArray.length;i++){
                
                if(sum>=0){
                    sum+=intArray[i];
                }else{
                    sum=intArray[i];
                }
                if(sum>max){
                    max=sum;
                }
            }
            System.out.println("子数组中的最大值:"+max);
        }
    
    }
    public class Invoke {
    
        public static void main(String[] args) {
            // TODO 自动生成的方法存根
            Random random=new Random();
            //int num=random.nextInt(10);
            int[] intArray=new int[10];
            System.out.print("随机数组:");
            for(int i=0;i<intArray.length;i++){
                intArray[i]=random.nextInt(10)-5;
                System.out.print(intArray[i]+"  ");
            }
            System.out.print("
    ");
            IntArrayMax intArrayMax=new IntArrayMax();
            intArrayMax.MaxIntArray(intArray);
    
        }
    
    }

    结果截图:

     总结:

    编程前应该先分析清楚题的意思,然后想好思路,进行编程。

  • 相关阅读:
    一周好文(15)
    一周好文(13)
    宏定义中的 "#" 和 "##"
    一周好文(14)
    CCRenderTexture崩溃问题分析
    C++反射机制的实现(转)
    一周好文(16)
    opengl on mac
    uthash: a hash table for C strcutures
    CC3LineNode线条变色的问题
  • 原文地址:https://www.cnblogs.com/andibier/p/7988421.html
Copyright © 2011-2022 走看看