最大子串和与最小子串和
做了牛客哈理工的一套训练赛的题目,真的是知识欠缺严重啊,首先补一下这个最大和最小子串和的问题。
求一个数组中连续一段和的最大值和最小值问题
最大值函数代码
ll maxsum() //最大和
{ll sum=0,maxx=-2147483647;for(int i=0;i<n;i++){sum += a[i];if(sum > maxx)maxx = sum;if(sum < 0)sum = 0;}return maxx;
}
最小值函数代码
int minsum() //最小和
{int sum1=0,minn=2147483647;for(int i=0;i<n;i++){sum += num[i];if(sum < minn)minn = sum;if(sum > 0)sum = 0;}return minn;
}
原题链接:寂寞如雪
原题内容:
题目描述
格雷福斯因为由于不知名力量失去了战斗力,需要启明小朋友为他点烟才能恢复力量,格雷福斯需要的烟是一种名为寂寞如雪的烟,启明小朋友需要截取一段连续的寂寞制作成寂寞如雪帮助格雷福斯恢复力量。
寂寞可以看做一段连续的01字符串,其中0表示落寞,1表示孤独,格雷福斯只需要孤独不需要落寞。因为格雷福斯只有两发子弹,所以格雷福斯不喜欢偶数。多个连续出现的孤独可以看做一段孤独,寂寞如雪中第奇数段长度为n的孤独可以为格雷福斯提供n2点力量,第偶数段长度为n的孤独会减少格雷福斯n2点力量,启明小朋友不知道格雷福斯最多可以恢复多少点力量,所以向你求助。
输入描述:
输入共一行,一个长度不超过1e6的字符串。
输出描述:
一个整数,最多可以恢复的力量。
输入:
111011001111100111
输出:
30
样例解释:
截取1110110011111,获得的力量为3^2-2^2+5^2=30
备注:
连续的1在计算时会被算成一段,不可以拆成多段
第奇数段还是第偶数段是看截取后字符串中的位置
题解:先对01字符串进行统计,统计出连续的1的个数分别是多少,因为截取之后,该段要么为第奇数段要么为第偶数段,所有该段的值要么为正数要么为负数,一共这两种情况,只需要计算这两种情况中的最大和最小值即可
AC代码如下:
#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
const int N = 1e6+10;
ll a[N];//第一段为正
ll af[N];//第一段为负
ll n;
ll maxsum() //最大和
{ll sum=0,maxx=-2147483647;for(int i=0;i<n;i++){sum += a[i];if(sum > maxx)maxx = sum;if(sum < 0)sum = 0;}return maxx;
}
ll maxsumf() //最大和
{ll sum=0,maxx=-2147483647;for(int i=0;i<n;i++){sum += af[i];if(sum > maxx)maxx = sum;if(sum < 0)sum = 0;}return maxx;
}
int main()
{string s;cin >> s;int cnt = 0;bool flag = 0;for(int i = 0;i < s.size();i++){if(s[i] == '1'){//等于一时间计数,并且将flag标记为1记录cnt++;flag = 1;}else{if(flag){//s[i] == '0'如果这个时间flag被标记说明是前一段1刚结束,将计数的cnt加入数组中a[n] = cnt*cnt;af[n] = a[n];cnt = 0;if(n % 2 == 0){a[n] = -a[n];}else{af[n] = -af[n];}n++;flag = 0;}}}
// for(int i = 0;i < n;i++){
// cout << a[i] << " ";
// }
// cout << endl;cout << max(maxsum(),maxsumf());
}
最大子串和与最小子串和相关推荐
- 求周期字符串的最小子串
示例:输入abcabcabc,此时最小的子串是abc,长度为3,输出3. 直接给出代码进行讲解 import java.util.Scanner; public class minstring {pu ...
- java最小子串覆盖_LeetCode 76. 最小覆盖子串
LeetCode 76. 最小覆盖子串 题目 给你一个字符串 S.一个字符串 T,请在字符串 S 里面找出:包含 T 所有字母的最小子串. 示例: 输入: S = "ADOBECODEBAN ...
- 72.Minimum Window Substring(最小子串窗口)
Level: Hard 题目描述: Given a string S and a string T, find the minimum window in S which will contain ...
- 最长公共子序列|最长公共子串|最长重复子串|最长不重复子串|最长回文子串|最长递增子序列|最大子数组和...
最长公共子序列|最长公共子串|最长重复子串|最长不重复子串|最长回文子串|最长递增子序列|最大子数组和 文章作者:Yx.Ac 文章来源:勇幸|Thinking (http://www.ahathi ...
- 数据结构求子串、非空子串、真子串、非空真子串数
子串.非空子串.真子串.非空真子串,求数公式及例子 子串 非空子串 真子串 非空真子串 (1+n)∗n2+1\frac {(1+n)*n}{2}+12(1+n)∗n+1 (1+n)∗n2\frac ...
- 子串、真子串、非空子串、非空真子串的求解方法(数据结构)
** 字串.真子串.非空子串.非空真子串的求解方法 ** Eg:串S="software" 子串的求解方法 n(n+1)/2 +1 此处n为8,所以串S的子串为37 真子串的求解方 ...
- c语言 替换字符串中的子串,字符串中的子串替换
在很多编程语言中,都封装了字符串替换的操作,那么我们这里自己用C语言来实现一个字符串替换的函数.具体需求为:Replace(String S,String T,String V),用V替换主串S中出现 ...
- java最小子串覆盖_Java 算法-最小子串覆盖
今天在lintCode上做了一道题,感觉有必要将它记录下来. 1. 概览 (1).题意 给定一个字符串source和一个目标字符串target,在字符串source中找到包括所有目标字符串字母的子串. ...
- 滑动窗口解决最小子串问题 leetcode3. Longest Substring Without Repeating Characters
问题描述: Given a string, find the length of the longest substring without repeating characters. Example ...
最新文章
- laravel-admin集成ueditor编辑器的图片列表显示问题解决方法
- COCO新记录:60.6AP!微软提出采用注意力机制进行检测头统一的Dynamic Head
- 类的成员和嵌套(建模)
- Reduce Join介绍及案例
- box-shadow技巧分享
- jQuery以JSONP的访问调用一个WCF REST服务
- gan怎么输入一维数据_时空序列预测模型GAN+LSTM
- 一图看懂边缘计算整体架构
- 路漫漫其修远兮,吾要上下左右前后而求索
- python将h264文件视频转为mp4格式
- 个人商业画布分析-0408-v1.0王玉娟
- python打印什么意思,python语句:print(*[1,2,3]),是什么意思?
- 亚商投资顾问 早餐FM/1116全球6G发展大会开幕
- 增广贤文( 道家儿童启蒙书目)
- 携程笔试__界面测试用例
- ELADMIN学习第一次
- 暗黑破坏神不朽国服什么时候上线 暗黑破坏神不朽延期原因
- 杂文(1):Java对象引用详解
- 建设智能温室大棚的条件
- 自动采集收录导航系统源码分享