package com.alipay.math.base;
/**
* 最大子序求和
*
* @author xu.le
*
*/
public class MaxSubsequenceSum {
static int seqStart=0;
static int seqEnd=0;
/**
* 时间复杂度O(n平方)
* @param a
* @return
*/
public static int maxSubsequenceSum(int[] a){
int maxSum=0;//用来存储最大子序和
for(int i=0;i<a.length;i++){
int tempSum=0;//临时最大子序和
for(int j=i;j<a.length;j++){
tempSum+=a[j];
if(tempSum>maxSum){
maxSum=tempSum;
seqStart=i;
seqEnd=j;
}
}
}
return maxSum;
}
/**
* 时间复杂度O(n)
* @param a
* @return
*/
public static int maxSubsequenceSumAdvance(int[] a){
int maxSum=0;
int tempSum=0;
int count=0;
for(int i=0,j=0;i<a.length;j++){
tempSum+=a[j];
if(tempSum>maxSum){
maxSum=tempSum;
if(count==0)
seqStart=i;
seqEnd=j;
count++;
}else {
if(tempSum<0)
tempSum=0;
}
i=j+1;
}
return maxSum;
}
public static void main(String args[]){
int[] i={-2,11,-4,13,-5,2};
int[] j={1,-3,4,-2,-1,6};
int maxSum=maxSubsequenceSumAdvance(i);
System.out.println("maxSum:"+maxSum);
System.out.println("seqStart:"+i[seqStart]);
System.out.println("seqEnd:"+i[seqEnd]);
}
}
分享到:
相关推荐
最大子序和的问题。首先,我们遍历所有可能的行组合,然后对每行的列求和,得到一个一维数组。接下来,我们对这个一维数组应用Kadane's Algorithm(卡丹算法)找到最大子序列和。 - 时间复杂度优化到O(m^2n),比...
现有 n 个整数,将其中个位数为 k 的数进行累加求和。 - 输入:第一行输入2个整数 n、k(0,0≤k≤9),第二行输入 n 个非负整数(每个数不大于 100000)。 - 输出:输出满足条件的累加和。 **示例输入与输出:** - ...
- **前缀和优化法**:使用前缀和数组优化子序列求和的过程。对于任意子序列 [i, j],其和可以表示为 sum = a[j] - a[i-1],其中 a 是前缀和数组。这种优化后的算法时间复杂度为 O(N^2)。 - **动态维护最小前缀和法**...
- **常用函数**:COUNT(计数)、SUM(求和)、AVG(平均值)、MAX(最大值)、MIN(最小值)等。 - **示例**:计算`Students`表中所有学生的数量: ```sql SELECT COUNT(*) FROM Students; ``` #### 11. GROUP ...
- **最大子阵和**:在矩阵中找到最大的子矩阵和。 14. **其它**: - **大数**:处理大整数的运算,通常用于超出了标准整型范围的情况。 - **分数**:实现分数类,处理有理数的运算。 - **矩阵**:矩阵的加减...
最大子序和 简单 数组 54 螺旋矩阵 数组 55 跳跃游戏 58 最后一个单词的长度 61 旋转链表 中等 链表 62 不同路径 中等 动态规划 64 最小路径和 中等 动态规划 66 加一 简单 数组 67 二进制求和 70 爬楼梯 简单 动态...
53、最大子序和 56、合并区间 58、最后一个单词的长度 63、加一 67、二进制求和 70、爬楼梯 75、颜色分类 83、删除排序链表中的重复元素 94、二叉树的中序遍历 98、验证二叉搜索树 121、买卖股票的最佳时机I 122、...
最大子序和 Easy 56 合并区间 Middle 67 二进制求和 Easy 72 编辑距离 Hard 78 子集 Middle 88 合并两个有序数组 Easy 94 不同的二叉搜索树 Middle 95 不同的二叉搜索树 II Middle 110 平衡二叉树 Easy 123
类似地,寻找二维数组中的最大子阵和。 --- #### 十四、其它 **14.1 大数 (只能处理正数)** 提供大数的表示和操作方法。 **14.2 分数** 介绍分数的表示和运算。 **14.3 矩阵** 讲解矩阵的运算,如加减乘等。...
最大子序和 Java 54 顺时针打印矩阵 Python 58 最后一个单词的长度 Java 66 加一 Java 67 二进制求和 Java 69 x的平方根 Java 70 爬楼梯 Java 79 单词搜索 Python 83 删除排序链表中的重复元素 Java 88 合并两个...
1. **重儿子**:在一个节点的子节点中,度最大(子节点数量最多)的那个。 2. **轻儿子**:除了重儿子之外的其他子节点。 3. **重边**:连接一个节点与其重儿子的边。 4. **轻边**:连接一个节点与其轻儿子的边。 5....
- **最大值**:`MAX(field)` 最大值 - **最小值**:`MIN(field)` 最小值 #### 4. 联合查询 - **UNION**:去除重复行 - **UNION ALL**:保留所有行 - **EXCEPT**:返回第一个集合中有而第二个集合中没有的行 - **...
最大子序和 Java 数组、动态规划 58 最后一个单词的长度 Java 字符串 66 加一 Java 数组、数学 67 二进制求和 Java 数学、字符串 69 x 的平方根 Java 数学、二分查找 70 爬楼梯 Java 动态规划 83 删除排序链表中的...
最大子序和 简单 : 螺旋矩阵 中等 0056 合并区间 中等 0058 最后一个单词的长度 简单 最小路径和 中等 0066 加一 简单 0067 二进制求和 简单 0069 x 的平方根 简单 爬楼梯 简单 编辑距离 困难 最小覆盖子串 困难 ...
译者序. 前言 第一部分 基础知识 引言 第1章 算法在计算中的作用 1.1 算法 1.2 作为一种技术的算法 第2章 算法入门 2.1 插入排序 2.2 算法分析 2.3 算法设计 2.3.1 分治法 2.3.2 分治法分析 ...
最大子序和 56 合并区间 58 最后一个单词的长度 66 加1 67 二进制求和 69 x 的平方根 70 爬楼梯 75 颜色分类 83 删除排序链表中的重复元素 88 合并两个有序数组 99 恢复二叉搜索树 100 相同的树 101 对称二叉树 105 ...
- **子段和问题**:给定一个数组,找出其中连续子数组的最大和。 - **求解方法**:使用动态规划或分治策略来解决该问题。 ##### 3.5 子阵和 - **子阵和定义**:与子段和类似,但关注的是多维数组中的子矩阵。 - **...
53.最大子序和【贪心算法|字符串|动态规划|回溯算法】: 查看代码 查看原题 66.加一【数组】: 查看代码 查看原题 67.二进制求和【数学|字符串】: 查看代码 查看原题 69.x 的平方根【数学|二分查找】: 查看代码 查看原...
最大子序和 √ --- √ × × 58 最后一个单词的长度 √ --- √ × × 66 加一 √ --- √ × × 67 二进制求和 √ --- √ × × 69 x 的平方根 √ --- √ × × 70 爬楼梯 √ --- √ × × 88 合并两个有序数组 √ --...
最大子序和 58. 最后一个单词的长度 66. 加一 67. 二进制求和 69. x 的平方根 70. 爬楼梯 83. 删除排序链表中的重复元素 88. 合并两个有序数组 100. 相同的树 101. 对称二叉树 104. 二叉树的...