zoukankan      html  css  js  c++  java
  • 软件工程概论作业三 信1205班 董文轩 刘权毅

    今天,王老师又给我们布置了一个结对开发项目的小课题,内容如下:

    用一个一维数组随机存储n个数,然后求其子数组最大值。另外,要求时间复杂度为O(n)。其中,子数组表示k(k=1,2,3,······,n)个连续的数组元素所组成的数组。

    对于这个问题,我们经过分析,得到了一些基本思路。

    ①首先,我们先考虑如何存储不同子数组的数据信息。在这里,我们采用链表的存储方式来存储数据。由于链表对应有头指针,因此在遍历链表时方便查找数据;而且,链表是顺序存储的,满足题目要求,方便建立不同的子数组。

    ②其次,我们要确定每个链表要存储的数据。首先我们要一个num[]数组,它用来存储当前所取的子数组的连续的下标。同时,还需要一个max值,用来存储经过比较后的子数组的最大值;最后还需要一个next指针。

    ③接下来,就是考虑如何求这个max值,又可以保证时间复杂度为O(n)。首先,我们不能使用循环嵌套,否则,时间复杂度会呈现非线性。在这里,我们考虑构造一个sort函数来筛选出max值,并将其存储到链表中去。这里定义的sort函数结构大致如下:

    首先建立一个动态数组,如:int a[]=new int(m);//m表示数组大小

    void sort(int m1,int *a,int n,*p)//m1表示数组大小,*a表示当前子数组起点的下标,n表示所取子数组中连续元素的个数,*p相当于链表的头指针

    {

           for(n=1;n<=m;n++){}//这里表示取间隔为n(n=1,2,3,······,m)的子数组

    \\这里采用头插法来创建链表,同时赋予链表索要记录的数据num[]和max值

    }

    这时我们所创建的链表大致如下:

    这样,便完成了这次程序。以上就是我们的思路和算法,可能中间存在一些缺陷和思路上的漏洞,我们会在以后的编程时加以完善和改进,谢谢!

                                                                                                                                                                                               信1205班

                                                                                                                                                                                                 刘权毅

                                                                                                                                                                                                 董文轩

  • 相关阅读:
    rhel 6.4 + udev+ 11.2.0.3 + gi + asm+ rac 双节点安装
    rhel 6.4 + udev + 11.2.0.3 + asm 单点安装
    vmware 中linux虚拟机动态添加硬盘
    flashback drop
    flashback query
    11g crsctl start/stop crs 和 crsctl start/stop cluster 的关系
    10g crs 启动报错的记录
    检测数据库日志的切换频率及归档文件大小的sql
    用widthStep的方法来增加某范围的像素----与imageROI对比
    用imageROI来增加某范围的像素
  • 原文地址:https://www.cnblogs.com/dashendwx/p/3606212.html
Copyright © 2011-2022 走看看