课堂实践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);
    }
}

原文地址:https://www.cnblogs.com/Excusezuo/p/10500238.html

时间: 2024-10-07 14:27:54

课堂实践01的相关文章

《Java 程序设计》课堂实践项目汇总链接

1.<Java 程序设计>课堂实践项目-命令行参数 2.<Java 程序设计>课堂实践项目-mini dc 3.<Java 程序设计>课堂实践项目-Arrays和String单元测试 4.<Java 程序设计>课堂实践项目-类定义

# 20155336 2017-2018 1 《信息安全系统设计基础》2017-9-27课堂实践

20155336 2017-2018 1 <信息安全系统设计基础>2017-9-27课堂实践 第一题:vi 每个.c一个文件,每个.h一个文件,文件名中最好有自己的学号 用Vi输入图中代码,并用gcc编译通过 在Vi中使用K查找printf的帮助文档 提交vi编辑过程截图,要全屏,包含自己的学号信息 说起来很惭愧,第一次接触虚拟机,对很多地方都陌生,正好趁学习这门课程掌握一下虚拟机的基本操作. 首先创建一个文件夹,命名为text1.然后将第一道题的要求都录入进去.录入完毕后,输入`gcc *.

20155318 第十六周课堂实践——嵌入式基础

20155318 第十六周课堂实践加分作业 测试中错误部分的理解和学习 根据下图,完成对时分秒的提取和设置 课上提交的答案: 错误原因:没有注意时间变量和地址问题,应在修改为: #define Time_Addr 0xFFFFC0000 //实时钟芯片的IO映像基址是OxFFFFC0000 #define TIME *(volatile int *)(Time_Addr+2) //时间存放在基址+2的寄存器中 int getHours() { int time=TIME; return (tim

第四周课堂实践总结

课堂知识点总结 数组边界值即为其中的最大最小值 循环与递归 循环语句 for循环语句(循环体只有一条语句时,大括号最好不要省略) for(表达式1:表达式2:表达式3) { 若干语句 } while循环语句(循环体只有一条语句时,大括号最好不要省略) while(表达式) { 若干语句 } do-while循环语句 do{ 若干语句 }while(表达式); 递归 递归算法是一种直接或间接地调用自身的算法.在编写程序时,递归算法对解决一大类问题是十分有效的,它往往使算法的描述简洁而且易于理解.递

七牛云徐晶:基于 WebRTC 架构的直播课堂实践

8 月 18 日下午,在七牛云架构师实践日第三十期,七牛云教育行业产品研发总监徐晶进行了<基于 WebRTC 架构的直播课堂实践>为题的实战分享.? 本文是对演讲内容的实录整理.??作者简介:??七牛云教育行业产品研发总监,拥有 12 年互联网行业经验.擅长将传统行业与互联网结合,形成具有 Plus 效果的互联网产品.曾在阿里巴巴大文娱负责整个优酷直播业务,目前任职七牛云教育行业产品研发总监,构建互联网教育云计算模型,打造在线教育行业的云计算解决方案,突破传统教育壁垒.? 流媒体协议与功能的演

20172303 2018-2019-1 《程序设计与数据结构》第2周课堂实践修改报告

20172303 2018-2019-1 <程序设计与数据结构>第2周课堂实践修改报告 测试内容 写出链表中结点插入的操作代码: public static void InsertNode(Student Head, Student node){ } 需求分析:该题要求的是在一个链表的结尾插入一个新的结点 测试过程 设计思路: 创建一个临时的指针temp用于遍历整个链表直至找到结尾 将temp指向新创建的指针node 测试过程 首先,需要编写Student类.在这个类中定义构造函数(包括姓名.

20172303 2018-2019-1 《程序设计与数据结构》第5周课堂实践报告

20172303 2018-2019-1 <程序设计与数据结构>第5周课堂实践报告 课程:<程序设计与数据结构> 班级: 1723 姓名: 范雯琪 学号:20172303 实验教师:王志强 助教:张师瑜/张之睿 实验日期:2018年10月12日 必修/选修: 必修 测试内容 ASL测试 已知线性表具有元素{5,13,19,21,37,56,64,75,80,88,92},如果使用折半查找法,ASL是多少? 要求:写出结题过程 测试原理 ASL(Average Search Leng

20172321 第六周课堂实践修改报告

20172321 第六周课堂实践修改报告 20172321 第六周课堂实践修改报告 课程:<程序设计与数据结构> 班级: 1723 姓名: 吴恒佚 学号: 20172321 实验教师:王志强 测试日期:2018年10月19日 必修/选修: 必修 题目要求 错误题目及原因 错题1:二分查找 原因:这次二分查找的元素个数为偶数个,我的理解有点问题,所以把数字10查找了4次 错题2:散列查找 原因:对元素21的位置判断错误 题目分析及错题修改 二分查找 从有序列表的中间元素开始查找,如果中间元素不是

软件工程系统开发课堂测试01

这次测试我们尝试的编辑了河北省重大技术需求证据系统,程序需求用户注册,用户登陆,系统主机面,需求征集,浏览需求,需求审核,修改密码等功能,并且需要进行数据库的连接,这些内容大部分在上一学期就有了些许的掌握,但在课堂测试的过程中,我还是只完成了部分功能,我只满足了用户注册,用户登陆,需求征集,修改密码这几个功能,并与数据库正常连接,图形化界面也并没有完成,下面我将展示我的代码. //Dao.java package Dao; import java.sql.Connection; import j