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

    题目要求:输入一个整型数组,数组里有正数也有负数

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

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

    设计思想

    求出所有连续子数组的和,然后进行比较。用array[0]来作为max的初始值.数组里有正数有负数,当与负数相加,如果和小于等于0,最大值等于未加负数之前的和,与正数相加则等于加正数之后的和。

    代码:

    import java.util.Scanner;
    
    public class Array{
    
        public static void main(String[] args) {
            
            System.out.print("请输入数组的长度N=");
            Scanner scan=new Scanner(System.in);
            int length=scan.nextInt();
            int arr[]=new int[length];
            for(int i=0;i<length;i++){
                arr[i]=(int)(10-Math.random()*20);  //产生-10到10的随机数
            }
            
            int arr2[]=new int[2*length];
            for(int i=0;i<2*length;i++){
                if(i<length){
                	arr2[i]=arr[i];
                }
                else{
                    arr2[i]=arr[i-length];
                }
            }
            
            System.out.print("数组:{ ");
            for(int i=0;i<length;i++){
            	System.out.print(arr[i]+" ");
            }    
            System.out.println("}");    //输出这个数组
            
            int max=0;
            int curSum=0;
            int M[]=new int[length];
            for(int s=0;s<length;s++){
            	
            	for(int j=s;j<s+length;j++){
            		if(j==s){
            			max=arr2[j];
            			curSum=max;
            			continue;
                    }
            		if(curSum<0){
            			curSum=0;
            		}
                
            		curSum+=arr2[j];
            		if(curSum>max){
            			max=curSum;
            		}
                }
            	M[s]=max;
            }
            int LL=Largest(M,length);
            System.out.println("最大子数组的和为:"+LL);
        }
        public static int Largest(int list[],int length)
        {
            int i,max=list[0];
    
            for(i=0;i<=length-1;i++)
            {
                if(list[i]> max){
                    max=list[i];
                }
            }    
            return max;
        }
    }
    

      

  • 相关阅读:
    docker 删除本地镜像
    hadoop 伪分布环境部署
    docker多镜像+nginx+django环境部署
    docker+django 运行环境部署
    设计数据结构-LRU缓存算法
    设计数据结构-Unionfind并查集算法
    String#intern理解
    java常见API和集合
    链表总结
    二叉树的基础总结
  • 原文地址:https://www.cnblogs.com/lzxw/p/6659896.html
Copyright © 2011-2022 走看看