zoukankan      html  css  js  c++  java
  • 课堂实践01

            这周四老师给我们讲了很多东西,告诉我们今后如何更好的工作学习。现在苦一点以后轻松一点。教学计划等也了解了大概。后两节课老师给我们布置了一道编程题如下:

          题目:返回一个整数数组中最大子数组的和。 要求: 输入一个整形数组,数组里有正数也有负数。        数组中连续的一个或多个整数组成一个子数组,每个子数组都有一个和。 求所有子数组的和的最大       值。要  求时间复杂度为O(n)。

            看到题目之后就开始提炼其中的关键字:整形数组,可正可负,一个或者多个子数组求和,获取和的最大值并输出和,时间复杂度是O(n).

           思路当然就是按部就班的创建数组,然后一次次的遍历整个数组,找到最大的那个输出。但是创建数组之后如何遍历所有数组让我思索了很久。用for循环一个个算出来并赋值给max,再判断当前输出的值是不是比上次的大,取最大值。思索了一会明确了思路,却不知道怎么编下去,总感觉有很多漏洞,逻辑还是有些问题,就不断的调试不断实验,一直没解决。

           过了一会,老师让做完的同学上台分享他们的思想方法,我的思路才慢慢清晰,矛盾的地方也渐渐明了。最后,参考了一个同学的方法,修补着自己的不足,创建数组,赋值,循环取极大值输出,将极大值输出比较,如果全是负数将最大的直接输出,全是正数就相加比较。茅塞顿开,编译成功。

    源代码如下:

    package project;
    import java.util.Scanner;
    public class dfsfa {
    
        public static void main(String[] args){
            int number,sum,a;
            int i;
            Scanner in = new Scanner(System.in);
            System.out.println("请输入数组的大小:");
            number=in.nextInt();
            int array[]=new int[number];
            System.out.println("请输入数组的值:");
            for(i=0;i<number;i++)
            {
                array[i]=in.nextInt();
            }
            sum=array[0];
           a=array[0];
            for(i=1;i<number;i++)
            {
                if(a<0)
                {
                    a=0;
                }
                a+=array[i];
                if(a>sum)
                    sum=a;
                
            }
            System.out.println(sum);
        }
    }
  • 相关阅读:
    【LeetCode】226. Invert Binary Tree
    【LeetCode】235. Lowest Common Ancestor of a Binary Search Tree
    【LeetCode】191. Number of 1 Bits
    【LeetCode】122. Best Time to Buy and Sell Stock II
    【LeetCode】100. Same Tree
    【LeetCode】237. Delete Node in a Linked List
    【LeetCode】136. Single Number
    【LeetCode】104. Maximum Depth of Binary Tree
    svn tree conflicts 解决方法
    sed详解
  • 原文地址:https://www.cnblogs.com/Excusezuo/p/10500238.html
Copyright © 2011-2022 走看看