原文发布时间为:2009-03-09 —— 来源于本人的百度文章 [由搬家工具导入]

1、有一个数组a[n],里面的数只有两种:-1或1。i,j是两个整数,假设0<=i<=j<=n-1,找出a[i]到a[j]中连续数之和最大的部分(如果最大部分存在相等的则优先找最短的)。

2、有一个数组a[n],里面含有正数负数,假设0<=i<=j<=n-1,找出a[i]到a[j]中连续数之和最大的部分(如果最大部分存在相等的则优先找最短的)。

这两题是一样的题目,解法如下:

//算法依据:
//如果a[i],a[i+1],,,,a[j] 是所求的最大子段,那么
//1:对于任何一个i <= k <= j的数 k,a[i]+a[i+1]+...+a[k]必然是不小于零的。
//2:对于任何一个i <= x <= j的数 x,a[x]+a[x+1]+...+a[j]必然是不小于零的。
//3:对于任何一个0 <= y < i的数 y,a[y]+a[y+1]+...+a[i-1]必然是小于零的。
//4:对于任何一个j < z     的数 z,a[j+1]+a[j+2]+...+a[z]必然是小于零的。
using System;
public class Class3
{
    public static void Main()//找出a[i]到a[j] 中连续数之和的最大部分
    {
        int[] a = new int[] { -1, 1, 1, -1, 1, 1, -1, -1, 2 };
        int length = a.Length;
        int i = 0, j = 0, begin = 0, end = 0, sum = 0, tempSum = 0;

        for (i = 0; i < length; ++i)
        {
            tempSum += a[i];
            if (tempSum > sum)
            {
                begin = j;
                end = i;
                sum = tempSum;
            }
            else if (tempSum <= 0)
            {
                tempSum = 0;
                j = i + 1;
            }
        }
        Console.WriteLine("Max is from a[{0}] to a[{1}] ,Sum is {2}", begin, end, sum);
        Console.ReadLine();
    }
}

练习题 求a[i]到a[j]累积和为最大的部分的更多相关文章

  1. //给定N个整数序列{A1,A2,A3...An},求函数f(i,j)=(k=i~j)Ak的求和

    //给定N个整数序列{A1,A2,A3...An},求函数f(i,j)=(k=i~j)Ak的求和 # include<stdio.h> void main() { ,sum1; ]={,- ...

  2. 一个环形公路,上面有N个站点,A1, ..., AN,其中Ai和Ai+1之间的距离为Di,AN和A1之间的距离为D0。 高效的求第i和第j个站点之间的距离,空间复杂度不超过O(N)。

    //点数 #define N 10 //点间距 int D[N]; //A1到每个Ai的距离 int A1ToX[N]; void preprocess() { srand(time(0)); //随 ...

  3. c语言练习题:求1-1/2+1/3-1/4+... -1/100的值

    /******************************************* 求1-1/2+1/3-1/4+... -1/100的值 *************************** ...

  4. 已知大小分别为m、n的两个无序数组A、B和一个常数c,求满足A[i]+B[j]=c的所有A[i]和B[j]

    方法一:枚举法.该方法是最容易.也是最简单的方法,枚举出数组A和数组B中所有的元素对,判断其和是否为c,如果是,则输出. 方法二:排序+二分查找法.首先,对两个数组中长度较大数组,不妨设为A,排序:然 ...

  5. Java SE练习题——求奇数

    欢迎来到Java SE练习题频道,我是Fishing,今天我带来的练习题是(做题会有不足之处,可评论,说出更好的方法): 通过键盘输入两个整数,计算这两个整数之间的所有奇数之和,并输出计算结果. 看到 ...

  6. java练习题-求int类型N值的阶乘

    //求int类型N值的阶乘 public static int getNumsJieCheng(int i){ int rs = 1; if(i==0||i==1){ return i; } if(i ...

  7. 组合数性质求K个数选取i*j个数分成j组的方案数

    分析:设方案数为ANS,C代表组合数: ANS=(C[K,I]*C[K-I,I][K-2*I,I]*...*C[K-(J-1)*I,I])/(J!); 也即: ANS=C[K,I*J]*(C[I*J, ...

  8. Java蓝桥杯练习题——求小数n位后3个数

    求整数除法小数点后第n位开始的3位数 位数不足的补0,如0.125小数第3位后三位:0.12500→500 输入格式:a b n,空格分开,a是被除数,b是除数,n是小数后的位置 输出格式:3位数字, ...

  9. Python3练习题求1000以内所有3和5的倍数的总和

    sum = 0 for i in range(1,1000):     if i%3 == 0 or i%5 == 0:         sum += i print(sum)

随机推荐

  1. oracle常用运维sql语句

    1.查询dblink语句 col owner for a20col db_link for a30col username for a20col host for a30set linesize 12 ...

  2. Python基础-Python注释

    一.什么是注释.特性 1.一段文字性的描述,通过注释,可以解释和明确Python代码的功能,并记录将来要修改的地方. 2.当程序处理时,Python解释器会自动忽略,不会被当做代码进行处理 二.注释的 ...

  3. Mysql 查询出某列字段 被包含于 条件数据中

    我们通常是使用  某条件  是否包含于 某列中   ,简单点 就是:select * from 表名 where  字段名 like '%条件数据%'; 现在说下   某列 被包含于 条件数据中 接下 ...

  4. jsp引用servlet生成的验证码代码演示

    此演示代码主要包括以下三部分:1.checkCode.java:用于生成验证码2.checkCodeServler3.check.jsp 验证 下面是checkCode.java的内容: 复制代码代码 ...

  5. linux系统快捷键使用

    本文记录linux系统中快捷键的使用 Ctrl + l 清屏,相当于clear命令Ctrl + o 执行当前命令,并重新显示本命令Ctrl + s 阻止屏幕输出,锁定Ctrl + q 允许屏幕输出Ct ...

  6. mysql主从复制及双主复制

    之前做过一次在单台机器上的多实例的mysql,这次分开做,使用两台主机. 这里使用的主机地址分别为: MASTER:192.168.214.135 SLAVE  : 192.168.214.128 这 ...

  7. django1.11文档 模型重点笔记

    模型最重要的属性是Manager. 它是Django 模型进行数据库查询操作的接口,并用于从数据库提取实例. 如果没有自定义Manager,则默认的名称为objects. Managers 只能通过模 ...

  8. Mysql主从数据同步cheksum问题

    做主从同步时出现问题,show slave status显示错误: Last_IO_Error: Got fatal error from master when reading data from ...

  9. 【PHP】判断变量是否为控

    1. isset功能:判断变量是否被初始化 说明:它并不会判断变量是否为空,并且可以用来判断数组中元素是否被定义过注意:当使用isset来判断数组元素是否被初始化过时,它的效率比array_key_e ...

  10. JZOJ 4307. 喝喝喝

    Description