求拥子串的最大和,算法复杂度O(n)
public class Test {
public static int max(int[] src) {
int sum = src[0];
int minsum = src[0];
int maxsum = src[0];
int sum1 = src[0];
int sum2 = src[0];
int max = src[0];
for (int i = 1; i < src.length; i++) {
sum += src[i];
if (sum1 > 0) {
sum1 += src[i];
} else {
sum1 = src[i];
}
if (sum2 < 0) {
sum2 += src[i];
} else {
sum2 = src[i];
}
if (sum1 > maxsum) {
maxsum = sum1;
}
if (sum2 < minsum) {
minsum = sum2;
}
}
max = maxsum > sum - minsum ? maxsum : sum - minsum;
if(minsum == sum) {
max = maxsum;
}
return max;
}
public static void main(String[] args) {
int src[] = { 8,11, 2, 3,-6, 6, 7, 8 };
System.out.println(Test.max(src));
}
}
分享到:
相关推荐
综上所述,Manacher算法作为一种专门针对回文子串求解的高效算法,通过巧妙的预处理和动态规划策略,将原本O(N^2)的复杂度降低至O(n),极大地提升了算法的性能。对于处理大规模数据集或需要快速响应的应用场景来说,...
动态规划求最大匹配子串 ...动态规划求最大匹配子串是一个常见的计算机科学问题,我们可以使用动态规划算法来解决该问题,该算法的时间复杂度和空间复杂度均为O(n*m),其中n和m分别为两个字符串的长度。
ACM比赛模板积累,Manacher算法,时间复杂度O(n),可适应于求输入串的最长回文子串
这个问题是求最大子串和问题的一个扩展,它不仅要求找到一个连续子数组的最大和,而是要求在所有可能的子数组组合中找到最大的和。在给定的代码中,使用了动态规划的方法来解决这个问题。 动态规划是一种有效解决...
标题中的“+1和-1和最大的子串”是一个经典的计算机科学问题,它涉及到数组、字符串处理以及动态规划等概念。这个问题的目标是在一个由+1和-1组成的序列中找到和最大的连续子序列(子串),这里的“和”指的是子序列...
这样我们就可以在O(n)时间复杂度内找到所有的子串。 3. 数据结构 在这个问题中,我们使用了树状数组和线段树来维护字符串的信息。树状数组用于维护位置上是否还存在字符,而线段树用于维护出区间里每种字符的数量...
Manacher算法:求解最长回文字符串,时间复杂度为O(N) 回文串定义:“回文串”是一个正读和反读都一样的字符串,比如“level”或者“noon”等等就是回文串。回文子串,顾名思义,即字符串中满足回文性质的子串。
- 总体来看,整个算法的时间复杂度为O(n log n)。 #### 三、Bzoj2565 最长双回文子串 ##### 1. 题目描述 Bzoj2565要求找出字符串中最长的由两个回文子串组成的子串,即这两个子串连接起来形成的串仍然是回文串。 ...
最大公共子串计算论文相似度:事件复杂度O(m*n),空间复杂度Omin(m,n)),可以用来计算两个字符串的最大公共子串长度、相似度;可以用于论文相似度量、地理信息等基于相似度量的查询等环境。由于空间复杂度低,因此可...
Manacher's Algorithm是一种用于在O(n)时间复杂度内找到字符串中最长回文子串的高效算法。这个算法的核心思想是通过巧妙地预处理字符串并利用回文串的对称性来减少重复计算,从而达到线性时间复杂度。 首先,我们...
这种基于动态规划的LCS算法的时间复杂度是O(nm),其中n和m分别是两个输入字符串的长度。空间复杂度也是O(nm)。虽然不是最优化的解决方案,但对于一般规模的输入,这种算法已经足够高效。 6. **实际应用**: LCS...
根据给定文件的信息,本文将详细介绍如何在两个...值得注意的是,这种方法的时间复杂度较高,为O(m*n),其中m和n分别是两个字符串的长度。在实际应用中,针对更大规模的数据集,可能还需要考虑更高效的算法来提高性能。
这些算法利用了前缀函数或哈希函数来快速判断子串是否存在,从而将时间复杂度降低到O(n^2)或O(nlogn)。KMP算法通过构建部分匹配表避免了不必要的字符比较,而Rabin-Karp算法则利用滚动哈希减少重复计算。 此外,更...
这两个算法相对于朴素的暴力匹配方法(时间复杂度O(n*m))有了很大的优化,尤其是在子串较长或需要查找多个子串时效果更明显。 总的来说,理解和掌握KMP和Sunday算法对于进行高效的字符串处理至关重要,它们是编程...
2. **时间复杂度分析**:该算法的时间复杂度为O(L1 * L2),其中L1和L2分别为输入字符串的长度。 3. **空间复杂度分析**:空间复杂度同样为O(L1 * L2),主要消耗来自于二维数组`dp`。 4. **优化方向**:对于更长的...
暴力方法通常会检查所有可能的子串,时间复杂度为O(n^2),在大数据量下效率低下。 在O(nlogn)的解决方案中,一个典型的算法是“Manacher's Algorithm”(曼哈彻算法),由Edmund Manacher于1975年提出。这个算法...
Manacher's 算法是一种高效解决字符串中最长回文子串问题的算法,它能在O(n)的时间复杂度内完成,其中n是字符串的长度。这个算法由Manacher在1975年提出,主要利用了回文串的对称性质来减少不必要的重复计算。 首先...
Manacher算法是一种高效、简洁的算法,能够在O(n)的时间复杂度内找到一个字符串中的最长回文子串。通过对称性的巧妙利用和动态规划的思想,该算法极大地减少了不必要的比较,使得解决这个问题变得非常高效。
这种方法的时间复杂度是O(n*m),其中n和m分别是A和B的长度。 2. **KMP算法**(Knuth-Morris-Pratt算法):这是一种更高效的算法,它避免了对已匹配部分的重复比较。通过构建部分匹配表,可以在字符串A中快速定位到...
这个问题可以使用滑动窗口算法来解决,时间复杂度为O(n),空间复杂度为O(min(n,m))。 4. 复原IP地址:给定一个字符串,复原成一个合法的IP地址。这个问题可以使用回溯算法来解决,时间复杂度为O(4^n),空间复杂度为...