zoukankan      html  css  js  c++  java
  • 数组

    题目要求:

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

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

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

    设计思路:

    因为题目要求数组中有正数也有负数,那么保证程序的时间复杂度为O(n)相对来讲还是较为容易的。问题是如何让用户随意输入一定范围内的整数数组,最后以回车或者某个结束符结束,然后程序可以读出用户输入的数组元素个数进行运算。结果是用getchar()函数解决了这个问题,

    代码:

     

    #include<iostream>using namespace std;
    int main()
    {
        int arr[1000];
        int i, MaxSum = 0, max, sum = 0, num = 1, count = 0;
        /*MaxSum是子数组最大和
          max是整数组的最大值
          sum是子数组的和
          num是元素个数
          count是元素中负数的个数*/
        cout << "请输入一个整数数组(不超过1000个):" << endl;
        cin >> arr[0];
        while (getchar() != '
    ')
        {
            cin >> arr[num];
            num++;
        }
     
        for (i = 0; i < num; i++)
        {
            if (sum < 0)
                sum = arr[i];//当子数组和小于0时,与无论与后面数组如何相加,和肯定小于后一段数组之和,此时,将b重新赋值,置为下一个元素
            else
                sum += arr[i];
            if (MaxSum < sum)
                MaxSum = sum;
        }
     
        max = arr[0];//d记录数组中的最大元素值
        for (i = 0; i<num; i++)  //如果数组全为负数,最大子数组和就是数组中最大值    {
            if (arr[i]<0)
                count++;
            if (arr[i]>max)
                max = arr[i];
            if (count == num)
                MaxSum = max;
     
        }
        cout << "子数组的最大和为:" << MaxSum << endl;
        return 0;
     
    }

     

    结果截图:

     

     

    总结:

    一开始没什么思路,上网上查了些资料,也慢慢搞懂了一些,学到了些东西

  • 相关阅读:
    通过三个DEMO学会SignalR的三种实现方式
    [Asp.net]SignalR实现实时日志监控
    SignalR -- server push 利器
    Microsoft ASP.NET SignalR
    在 Asp.NET MVC 中使用 SignalR 实现推送功能
    asp.net signalR 专题—— 第一篇 你需要好好掌握的实时通讯利器
    asp.net signalR 专题—— 第二篇 对PersistentConnection持久连接的快速讲解
    后台管理UI推荐
    ASP.NET通用权限系统快速开发框架
    .NET通用基本权限系统框架源代码
  • 原文地址:https://www.cnblogs.com/ICDTAD/p/13110775.html
Copyright © 2011-2022 走看看