练习题 求a[i]到a[j]累积和为最大的部分
原文发布时间为: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]累积和为最大的部分的更多相关文章
- //给定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; ]={,- ...
- 一个环形公路,上面有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)); //随 ...
- c语言练习题:求1-1/2+1/3-1/4+... -1/100的值
/******************************************* 求1-1/2+1/3-1/4+... -1/100的值 *************************** ...
- 已知大小分别为m、n的两个无序数组A、B和一个常数c,求满足A[i]+B[j]=c的所有A[i]和B[j]
方法一:枚举法.该方法是最容易.也是最简单的方法,枚举出数组A和数组B中所有的元素对,判断其和是否为c,如果是,则输出. 方法二:排序+二分查找法.首先,对两个数组中长度较大数组,不妨设为A,排序:然 ...
- Java SE练习题——求奇数
欢迎来到Java SE练习题频道,我是Fishing,今天我带来的练习题是(做题会有不足之处,可评论,说出更好的方法): 通过键盘输入两个整数,计算这两个整数之间的所有奇数之和,并输出计算结果. 看到 ...
- java练习题-求int类型N值的阶乘
//求int类型N值的阶乘 public static int getNumsJieCheng(int i){ int rs = 1; if(i==0||i==1){ return i; } if(i ...
- 组合数性质求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, ...
- Java蓝桥杯练习题——求小数n位后3个数
求整数除法小数点后第n位开始的3位数 位数不足的补0,如0.125小数第3位后三位:0.12500→500 输入格式:a b n,空格分开,a是被除数,b是除数,n是小数后的位置 输出格式:3位数字, ...
- Python3练习题求1000以内所有3和5的倍数的总和
sum = 0 for i in range(1,1000): if i%3 == 0 or i%5 == 0: sum += i print(sum)
随机推荐
- (77)zabbix主动、被动检测的详细过程与区别
zabbix agent检测分为主动(agent active)和被动(agent)两种形式,主动与被动的说法均是相对于agent来讨论的.简单说明一下主动与被动的区别如下: 主动:agent请求se ...
- [BZOJ1187]神奇游乐园(插头DP)
Description 题意给定一个矩阵,每个格子有权值,在[-1000.1000]内,求一条回路使得回路经过权值和最大,每个格子最多经过一次 2≤n≤100,2≤m≤6 Code #include ...
- DOS中断及程序调用
http://www.cnblogs.com/ynwlgh/archive/2011/12/12/2285017.html
- 华东交通大学2018年ACM“双基”程序设计竞赛 K
MIKU酱是个玩游戏氪金的人,游戏公司给她制定了新的规则,如果想从关卡i到关卡j,你需要交一些钱就可以了,但同时,MIKU酱的爸爸zjw很爱她,所以她可以每过一关就向她爸要一次钱,但她爸每次给他的钱是 ...
- excel VBA 将文本数值转换为数字格式(单元格中数据左上角是绿三角,鼠标点上有叹号标示)
Range("A6").SelectSelection.CopyRange("A10:A60").SelectRange(Selection, Selectio ...
- Java多线程并发技术
Java多线程并发技术 参考文献: http://blog.csdn.net/aboy123/article/details/38307539 http://blog.csdn.net/ghsau/a ...
- Firewall Rule Properties Page: Advanced Tab
Applies To: Windows 7, Windows Server 2008 R2 Use this tab to configure the profiles and interface t ...
- 【Single Num II】cpp
题目: Given an array of integers, every element appears three times except for one. Find that single o ...
- 用python批量下载贴吧图片 附源代码
环境:windows 7 64位:python2.7:IDE pycharm2016.1 功能: 批量下载百度贴吧某吧某页的所有帖子中的所有图片 使用方法: 1.安装python2.7,安装re模块, ...
- Leetcode with Python -> Array
118. Pascal's Triangle Given numRows, generate the first numRows of Pascal's triangle. For example, ...