• 个人作业1-数组


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

    要求:

    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),最后是上网查看前辈们的代码才完善了解题思路,通过这次个人作业,我知道在面对一个问题时,要先实现它的基本功能,在研究如何降低时间复杂度问题。

  • 相关阅读:
    COCOS2D-X中UI动画导致闪退与UI动画浅析
    使用cocos2d-x3.4结合cocos2.1.5制作小游戏《亲亲小熊》
    algorithm 学习之 for_each
    cocos2dx 3.2 Touch Listen和menu回调实现截屏
    Lua 中string.gsub(sourceString, pattern, replacementString) 返回值有两个
    python 装饰器模式 我的理解
    Https SSL Knowledge & how to get a self-signed certificate on ubuntu.
    公钥和私钥的理解
    Openwrt UCI 快捷切换SS 配置
    iptables ipset 实用命令
  • 原文地址:https://www.cnblogs.com/liujinxin123/p/10496528.html
Copyright © 2020-2023  润新知