zoukankan      html  css  js  c++  java
  • 数组的子数组和最大值

    题目:

    输入一个一维整形数组,数组里有正数也有负数。 一维数组首尾相接,象个一条首尾相接带子一样。 数组中连续的一个或多个整数组成一个子数组,每个子数组都有一个和。求所有子数组的和的最大值。

    程序设计思想:求循环数组的子数组和的最大值,求子数组循环到数组第一个元素,另外定义一个素组长度为原来数组的两倍,定义和m为0,依次加上数组元素,定义最大值max,判断max与m大小,m比max大的话,m的值赋给max。循环先从下标0开始,循环一个数组长度后,再从下标1开始,循环终止于开始位置的前一个元素,循环开始的位置依次增加,知道数组的最后一个位置截止。

    出现的问题:一次循环截止的条件刚开始写的j=k 发现出现数组下标越界的情况,改成j=k-1发现多加了元素,最后想到改为 j=k-1+s。

    源代码

    package ER;
    
    import java.util.Scanner;
    
    public class Text {
    
    	public static void main(String[] args) {
    		// TODO Auto-generated method stub
    		//数组长度
    		int k;
    		System.out.println("请输入数组长度");
    		Scanner in=new Scanner(System.in);
    		k=in.nextInt();
    		int a[]=new int[k];
    		//输入数组的元素
    		System.out.println("输入数组的元素");
    		for(int i=0;i<k;i++){
    			int n;
    			n=in.nextInt();
    			a[i]=n;
    		}
    		int m = 0;
    		int max = 0;
    		int g=0;
    		int l;
    		l=2*k;
    		//循环定义b数组长度为a的两倍
    		int b[]=new int[l];
    		for(int e=0;e<l;e++){
    			if(e!=k){
    				b[e]=a[e];
    			}
    			if(e==k){
    				for(int r=0;r<k;r++){
    					b[r+k]=a[r];
    					e++;
    				}
    			}
    		}
    		//计算子数组和的最大值
    		int s=0;
    		int j;
    		for(j=0;j<k+s;j++){
    			m+=b[j];
    			if(m>max){
    				max=m;
    			}
    			if(j==k-1+s){
    				s++;
    				if(s<k){
    					j=s-1;
    					m=0;
    				}
    				else
    					break;
    			}
    			
    		}
    		System.out.println("数组的最大子数组的和为:"+max);
    		
    		
    	}
    
    }
    

      

  • 相关阅读:
    Java 和 DynamoDB
    关于Mongodb的全面总结
    utf8mb4 使用注意
    mysql 事务隔离讲的比较好的文章收藏。
    [mysql] 常用命令总结
    [JTA] Java事务api
    [Hibernate] Hibernate 参数设置一览表(转)
    Spring配置sessionFactory的几种常用方式
    [前端] org.apache.jasper.JasperException 页面有空引用
    [Hibernate] JPA与Hibernate的优缺点
  • 原文地址:https://www.cnblogs.com/zhouzh/p/6652910.html
Copyright © 2011-2022 走看看