zoukankan      html  css  js  c++  java
  • 数组中的最大子数组的和 刘博&徐梦迪

    2013年3月10日上午11:00

    题目:输入一个整型数组,数据元素有正数也有负数,求元素组合成连续子数组之和最大的子数组,要求时间复杂度为O(n)

    这是我们这一次是测试内容。刚刚老师耐心的给我们讲解了什么是子数组,这是非常经典的一道题。想要实现这个程序不难,只是能够很巧妙的把时间复杂度降为O(n)才是解题的关键。

    下面是我们结对pair的初级设计思路:

    1、键盘输入数组个数、数组元素。用cin实现

    2、实现一个for循环,找到以数组中第一个数为首的子数组的和

    定义一个变量sum并赋一个初值作为子数组的和,在定义一个max实现子数组最大值的存储

    刚开始想着定义一个数组add[]来放子数组和,然后通过子数组和的大小比较来实现max的查找。后来发现设置的子数组最大值查找时没有嵌套进循环而使max一直等于a[0].

    后来两人协商之后,决定直接用sum来作为子数组和,经过两个嵌套循环,内层for循环实现从i=j+1到i=n的子数组和sum的计算,通过if实现max和sum的比较,把较大的值赋给max。循环出来的就是a[0]为子数组第一个元素的max值。

    3、外层嵌套一个for循环,经过j=0到j=n的遍历,找到最终结果max

    4、输出结果

    思路过程如下:

    下面是我们的代码: 

    #include<iostream>
    using namespace std; 
    int main(int argc, char* argv[])
    {
        int a[10];
        int max=a[0];
        int i,j,n,sum=0;
        cout<<"输入数组个数:"<<endl;
        cin>>n;
        cout<<"输入数组元素:"<<endl;
    
        for(i=0;i<n;i++)
        {
            cin>>a[i];
        }
        for(j=0;j<n;j++)
        {
            sum=a[j];
            for(i=j+1;i<n;i++)
            {    
                sum=sum+a[i];
                if(max<sum)
                max=sum;
            }
        }
        cout<<max;
        
        return 0;
    }

     这个程序只是单纯的实现了求最大子数组和功能,时间复杂度是O(n^2),还不是很理想,有很大的改进空间。不过经历这次结对编程,也使我和我的小伙伴关系更好了一些,处理问题有了更高层次的提升,遇见问题,讨论问题,解决问题。我们一定会做的越来越好的。

  • 相关阅读:
    使用windows自带工具计算文件 MD5 值
    去除桌面图标的箭头
    给自己电脑(物理机)安装 linux 系统
    Python 字典 fromkeys()方法的坑
    Python 超时(运行时间太长) 自定义多长时间结束进程
    Win10 python2和python3共存
    verdidebussy的使用技巧
    <DC guide ---2>
    <DC guide ---1>
    <RTL To GDS ---第一阶段>
  • 原文地址:https://www.cnblogs.com/liubobo/p/3591660.html
Copyright © 2011-2022 走看看