zoukankan      html  css  js  c++  java
  • 个人作业一

      题目:返回一个整数数组中最大子数组的和。

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

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

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

      设计思想:手动输入若干个整数(n个),然后从第一个数开始,用第一个数每次多加后面的一个数得到和sum,将sum与之前的sum比较,若后得到的大,则sum的值为后得到的sum。当sum为第一个数至最后一个数之和时,将得到的数赋予数组max【0】用来存放以第一个数开头的最大值。之后再从第二个数开始,执行上述步骤。直到进行到第n-1个数进行完毕,我们也就得到了数组max【】;而所有的子数组的和的最大值必然存在于数组max中。所以再对max数组的每个元素进行比较,选出最大值就OK了。

      在这期间出现了数组没有初始化的问题,之后对其进行了循环赋值为0;还有各个数组之间赋值出错的问题,理清思路后得以解决。  

      代码如下:

    package com.two;
    import java.util.*;
    /*
     * 寻找各个数开头的最大值,进行比较
     * 
     * */
    public class two {
        /*public static int sum() {
            
            return max1;
        }*/
        
        public static void main(String[] args)
        {
            Scanner input=new Scanner(System.in);
            int n=0;
            System.out.print("请输入数的个数:");
            n=input.nextInt();
            System.out.print("请输入"+n+"个数:");
            int a[]=new int[5];
            for(int i=0;i<5;i++) {               //输入
                a[i]=input.nextInt();
            }                     
            int max[]=new int[a.length];
            for(int i=0;i<max.length;i++) {
                max[i]=0;
            }
            int sum=0;
            for(int i=0;i<a.length;i++) {           //以各个数开头的最大值
                max[i]=a[i];
                sum=max[i];
                if(i<a.length) {
                    for(int j=i+1;j<a.length;j++) {
                        sum=sum+a[j];
                        if(max[i]<sum)max[i]=sum;
                    }
                }
            }
            int max1=max[0];
            for(int i=1;i<max.length;i++) {
                if(max1<=max[i]) {
                    max1=max[i];
                }
            }
            System.out.println(max1);
        }
    }

      截图: 

      

      

      总结:一定要理清思路,之后就很容易了。

  • 相关阅读:
    [LeetCode] Count and Say
    [LeetCode] Search Insert Position
    [LeetCode] Substring with Concatenation of All Words
    [LeetCode] Divide Two Integers
    笔记本清灰后组装后出现蓝屏,并不断的循环重新启动。
    自学MVC看这里——全网最全ASP.NET MVC 教程汇总
    sqlzoo练习答案--SELECT names/zh
    iOS Autolayout情况下,ViewController嵌套时,childViewController的Frame异常问题
    atitit. 文件上传带进度条 atiUP 设计 java c# php
    POJ 3237 Tree 树链剖分
  • 原文地址:https://www.cnblogs.com/liyuchao/p/10505904.html
Copyright © 2011-2022 走看看