zoukankan      html  css  js  c++  java
  • 算法第三章上机实践报告

    1. 实践题目

    最大字段和

    2. 问题描述

    给定n个整数(可能为负数)组成的序列a[1],a[2],a[3],…,a[n],求该序列如a[i]+a[i+1]+…+a[j]的子段和的最大值。当所给的整数均为负数时,定义子段和为0。

    要求算法的时间复杂度为O(n)。

    3. 算法描述

    代码部分如下,首先考虑所给数均为负数的情况,将0赋值给m;若不均为负数,则比较a[i]与前面数之和的大小,取最大值赋给b[i],最后取数组b中的最大值赋给m,即为最大字段和。

    for(int i = 1;i<=n;i++){
    if(a[i]<0){
    j++;
    }
    }
    if(j == n){
    m = 0;
    }
    else{
    for(int i = 1; i <= n;i++){
    b[i] = max((b[i-1]+a[i]) , a[i]);
    }
    m = b[0];
    for(int i = 0; i<n;i++){
    if(b[i]>m)
    m = b[i];
    }
    }
    cout<<m;

    4. 算法时间及空间复杂度分析(要有分析过程)

    时间复杂度:算法中只用到一维数组的遍历,因此时间复杂度为O(n);

    空间复杂度:使用一维数组b[]存放字段和,空间复杂度为O(n)。

    5. 心得体会(对本次实践收获及疑惑进行总结)

    在b[i] = max((b[i-1]+a[i]) , a[i])语句中,对于哪两个数进行比较这个问题讨论过很多次,最后通过举例进行验证得到了最后的结果。所以以后可以多进行例子的验证,可以帮助很快找到规律。

  • 相关阅读:
    ps cc 2018安装
    eclipse 快速添加 set , get 方法
    电脑设置以太网
    C# 获取web.config配置文件内容
    C# @Page指令中的AutoEventWireup,CodeBehind,Inherits
    未能正确加载“Microsoft.VisualStudio.Implementation.EditorPackage”包
    C# 实现MD5加密
    mutex 简单介绍
    select @@IDENTITY
    C# vs2012创建报表
  • 原文地址:https://www.cnblogs.com/xjsunshine/p/9911731.html
Copyright © 2011-2022 走看看