九度oj 题目1527:首尾相连数组的最大子数组和
- 题目描述:
-
给定一个由N个整数元素组成的数组arr,数组中有正数也有负数,这个数组不是一般的数组,其首尾是相连的。数组中一个或多个连续元素可以组成一个子数组,其中存在这样的子数组arr[i],…arr[n-1],arr[0],…,arr[j],现在请你这个ACM_Lover用一个最高效的方法帮忙找出所有连续子数组和的最大值(如果数组中的元素全部为负数,则最大和为0,即一个也没有选)。
- 输入:
-
输入包含多个测试用例,每个测试用例共有两行,第一行是一个整数n(1=<n<=100000),表示数组的长度,第二行依次输入n个整数(整数绝对值不大于1000)。
- 输出:
-
对于每个测试用例,请输出子数组和的最大值。
- 样例输入:
-
6
1 -2 3 5 -1 2
5
6 -1 5 4 -7
- 样例输出:
-
10
14
这种题很有做的价值,乍一看不难,但做下去却不知道如何下手。
一开始的思路是按每一个负数作为开头算一遍,超时了
后来想到题目其实是要找到一个开头点,使得这个开头点开始算出的子数组和最小,
那么,这个开头点是不是就是这个数组中最小的那个负数?
按这样编码,提交,答案错误 举个反例
6
-7 8 -6 2 -6 8 -7是最小的,但-6+2-6比-7 还要小
所以应该先在数组中找最小和子数组,但这样不就又变成原来的问题了吗?(从该数组之中任意一位开始去求,均可求出答案)
这时我们可以这样考虑这个问题,若这个最小和数组不涉及循环的问题,那么可以按一般方法求出,之后再以该数组末尾的下一个开始求最大和
若这个最小和数组存在于首尾相连的位置,那么我们如果从开始去求最大和(就是从数组中间求),即可求得答案。
代码如下#include <cstdio>
#include <cstdlib>
#include <cstring>
#include <iostream>
using namespace std;
int num0[];
int num[]; int n; int find(int start) {
int maxi = ;
int cnt = ;
for(int i = start; i < n; i++) {
if(cnt < ) {
cnt = num[i];
}
else {
cnt = cnt + num[i];
}
if(cnt > maxi) {
maxi = cnt;
}
}
for(int i = ; i < start; i++) {
if(cnt < ) {
cnt = num[i];
}
else {
cnt = cnt + num[i];
}
if(cnt > maxi) {
maxi = cnt;
}
}
return maxi;
}
int main(int argc, char const *argv[])
{
while(scanf("%d",&n) != EOF) {
int j = ;
memset(num, , sizeof(num));
int state = ;
for(int i = ; i < n; i++) {
scanf("%d",&num0[i]);
if(num0[i] > ) {
if(state == ) {
j++;
state = ;
}
num[j++] = num0[i]; }
else {
num[j] = num[j] + num0[i];
if(state == ) {
state = ;
} }
}
n = j + state; /*for(int i = 0; i < n; i++) {
printf("%d ",num[i]);
}
puts("");*/
int local = , global = ;
int mini = -;
int sumi = ;
for(int i = ; i < n; i++) {
local = min(local+num[i], num[i]);
if(local < global) {
mini = i;
global = local;
}
}
int maxa = find();
int maxt = find(mini);
if(maxa < maxt) {
maxa = maxt;
}
printf("%d\n",maxa);
}
return ;
}--------2016-9-19更新
今天再看这道题,居然有些看不懂自己的代码
仔细分析了一下,
第71行道77行是求不考虑循环的情况下的最小连续子数组和的最后一个数的下标。
find(mini)求出了这种情况下的最长和
而考虑循环的话直接求find(0)即可
九度oj 题目1527:首尾相连数组的最大子数组和的更多相关文章
- 九度OJ 题目1384:二维数组中的查找
/********************************* * 日期:2013-10-11 * 作者:SJF0115 * 题号: 九度OJ 题目1384:二维数组中的查找 * 来源:http ...
- hdu 1284 关于钱币兑换的一系列问题 九度oj 题目1408:吃豆机器人
钱币兑换问题 Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others) Total Sub ...
- 九度oj题目&吉大考研11年机试题全解
九度oj题目(吉大考研11年机试题全解) 吉大考研机试2011年题目: 题目一(jobdu1105:字符串的反码). http://ac.jobdu.com/problem.php?pid=11 ...
- 九度oj 题目1007:奥运排序问题
九度oj 题目1007:奥运排序问题 恢复 题目描述: 按要求,给国家进行排名. 输入: 有多组数据. 第一行给出国家数N,要求排名的国家数M,国家号 ...
- 九度oj 题目1087:约数的个数
题目链接:http://ac.jobdu.com/problem.php?pid=1087 题目描述: 输入n个整数,依次输出每个数的约数的个数 输入: 输入的第一行为N,即数组的个数(N<=1 ...
- 九度oj题目1009:二叉搜索树
题目描述: 判断两序列是否为同一二叉搜索树序列 输入: 开始一个数n,(1<=n<=20) 表示有n个需要判断,n= 0 的时候输入结束. 接 ...
- 九度OJ题目1105:字符串的反码
tips:scanf,cin输入字符串遇到空格就停止,所以想输入一行字符并保留最后的"\0"还是用gets()函数比较好,九度OJ真操蛋,true?没有这个关键字,还是用1吧,还是 ...
- 九度oj题目1002:Grading
//不是说C语言就是C++的子集么,为毛printf在九度OJ上不能通过编译,abs还不支持参数为整型的abs()重载 //C++比较正确的做法是#include<cmath.h>,cou ...
- 九度OJ 题目1534:数组中第K小的数字(二分解)
题目链接:点击打开链接 题目描述: 给定两个整型数组A和B.我们将A和B中的元素两两相加可以得到数组C. 譬如A为[1,2],B为[3,4].那么由A和B中的元素两两相加得到的数组C为[4,5,5,6 ...
随机推荐
- 64位Windows系统下32位应用程序连接MySql
1.首先得安装“Connector/ODBC”,就是Mysql的ODBC驱动,这个是与应用程序相关的,而不是与操作系统相关的,也就是说,不管你的系统是x64还是x86,只要你的应用程序是x86的那么, ...
- Vue风格指南总结及对应ESLint规则配置
全手打原创,转载请标明出处:https://www.cnblogs.com/dreamsqin/p/10906951.html,多谢,=.=~ 必要的:规避错误: 强烈推荐:改善可读性和开发体验: 推 ...
- Android(java)学习笔记119:BroadcastReceiver之 短信发送的广播接收者
有时候,我们需要开发出来一个短信监听器,监听用户发送的短信记录,下面就是一个案例,这里同样需要使用广播机制. 下面同样是代码示例,MainActivity.java 和 activity_main. ...
- javaweb基础(17)_jsp九个内置对象
一.JSP运行原理 每个JSP 页面在第一次被访问时,WEB容器都会把请求交给JSP引擎(即一个Java程序)去处理.JSP引擎先将JSP翻译成一个_jspServlet(实质上也是一个servlet ...
- javaweb基础(12)_session详解
一.Session简单介绍 在WEB开发中,服务器可以为每个用户浏览器创建一个会话对象(session对象),注意:一个浏览器独占一个session对象(默认情况下).因此,在需要保存用户数据时,服务 ...
- MySQL 5.7.20绿色版安装详细图文教程
MySQL 5.7.20绿色版安装详细图文教程 MySQL是一个关系型数据库管理系统,由瑞典MySQL AB公司开发,目前属于Oracle旗下产品.这篇文章主要介绍了MySQL 5.7.20绿色版安装 ...
- ORACLE中RECORD、VARRAY、TABLE、IS REF CURSOR 的使用及实例详解
ORACLE中RECORD.VARRAY.TAB.IS REF CURSOR LE的使用及实例详解 create or replaceprocedure PRO_RECORD_ROW_TAB_EXAM ...
- Java 吃金币游戏设计与制作,下载版后补,代码没问题
package com.swift; import java.awt.Color; import java.awt.Point; import java.awt.event.KeyEvent; imp ...
- NSString 使用 copy、strong
// 首先定义2个属性 @property (nonatomic, strong) NSString *stStr; @property (nonatomic, copy) NSString *coS ...
- GoF23种设计模式之行为型模式之责任链模式
一.概述 使多个对象都有机会处理请求,从而避免请求的发送者和接收者之间的耦合关系.将这些对象连成一条链,并且沿着这条链传递请求,直到有一个对象处理它为止.其设计思想是:给对多个对象处理一个请求的机会, ...