博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
个人作业1-数组
阅读量:6690 次
发布时间:2019-06-25

本文共 1554 字,大约阅读时间需要 5 分钟。

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

要求:

1.输入一个整型数组,数组里有正数也有负数

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

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

 设计思想:

      因为是连续的一个或多个整数组成的子数组,因此如果数组的前端为负数的话可以忽略掉,从正数部分开始累加,如果当累加结果小于等于0时,可以从新进行累加,将新的累加部分和旧的累加部分进行对比,保留值大的。

       代码设计:创建一个数组num[n],设置一个int型变量maxstart并赋值为0,设置一个int型变量maxsum用来储存最大值,在for循环中首先判断maxstart的值是否小于等于0,如果小于等于0,则将num[i]的值赋给maxstart,反之在maxstart的基础上加上num[i]的值,

之后对maxstart和maxsum进行比较,判断大小。

出现的问题:

      当数组全为负数时,最大值会显示为0,发现最定义maxsum时将其值赋值为0,因此当数组全为负数时,最后结果为0。

解决方案:

    在进行for循环之前,将数组的第一个值赋给maxsum。

源代码:

package shuzhi;import java.util.Scanner;public class main {    public static void main(String[] args) {        int n;        int maxsum = 0;        int maxstart = 0;//用于判断子数组是否小于0        Scanner in = new Scanner(System.in);        System.out.println("输入数组的长度");        n = in.nextInt();        int num[]=new int[n];        System.out.println("输入数组中的值");        for(int i = 0;i < n;i++)        {            num[i] = in.nextInt();        }        maxsum = num[0];        for(int i = 0;i < n;i++)        {            if (maxstart <= 0) {
//忽略掉和为负数和0的子数组 maxstart = num[i]; }else { maxstart += num[i]; } if (maxsum < maxstart) { maxsum = maxstart; } } System.out.println("最大值为:" + maxsum); }}

结果截图:

       总结:

      这个问题的结果很好求出来,困难的是如何将算法简化到O(n),由于之前写代码只求实现功能,不关心时间复杂度问题,所以如何以简便的方法实现要求的功能让我废了很长时间,最初写出来的代码大部分是O(n*2)甚至是O(n*3),最后是上网查看前辈们的代码才完善了解题思路,通过这次个人作业,我知道在面对一个问题时,要先实现它的基本功能,在研究如何降低时间复杂度问题。

转载于:https://www.cnblogs.com/liujinxin123/p/10496528.html

你可能感兴趣的文章
sql如何分组选择显示最新的一条数据
查看>>
周锦民:腾讯在线教育视频互动直播间技术实践
查看>>
[perl] 正则表达式实现多模式匹配
查看>>
class左边nbu 2414 Please help the poor donkey!
查看>>
[转]UML类图、关系及其JAVA代码
查看>>
PhotoShop算法原理解析系列 - 像素化---》碎片。
查看>>
设计模式之责任链模式
查看>>
在 Windows 下安装 Oracle 11g XE (Express Edition)
查看>>
php多态设计
查看>>
oracel SQL多表查询优化
查看>>
Spring-Context的注解实现依赖注入功能
查看>>
CSS格式化 CSS代码压缩工具
查看>>
Android的TextView使用Html来处理图片显示、字体样式、超链接等
查看>>
mvc伪静态<三> IIS配置
查看>>
.NET设计模式(12):外观模式(Façade Pattern)(转)
查看>>
【leetcode】Maximum Gap(hard)★
查看>>
Visual Studio中的lib的链接顺序
查看>>
Cacti安装详细步骤
查看>>
android自定义radiobutton样式文字颜色随选中状态而改变
查看>>
【CodeForces 604B】F - 一般水的题1-More Cowbe
查看>>