`
yiminghe
  • 浏览: 1460612 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论

连续子数组和极值问题

阅读更多

Programming pearls 8 chapter question .

 

 

/**
* User: yiminghe
 * Date: 2009-2-16
 * Time: 15:40:11
 */
public class LongestSubArray {


    /**
     * 一维数组最大的连续子数组和 [ -1 ,2,3,-5]      return 5 [2,3]    O(n)
     *
     * @param a 一维数组
     * @return 最大的连续子数组和
     */
    public static int getLongestOne(int[] a) {
        int max = 0;
        int current = 0;
        for (int o : a) {
            current = Math.max(current + o, 0);
            max = Math.max(current, max);
        }
        return max;
    }


    /**
     * 2维数组最大的连续子数组和     O(m^2n)
     * [ -1 ,2,3,-5
     * 0 , 3, 5 , 0]
     * return 13
     * [ 2,3
     *   3,5]
     *
     * @param a2 2维数组
     * @param m  行数
     * @param n  列数
     * @return 最大的连续子数组和
     */
    public static int getLongestTwo(int[][] a2, int m, int n) {
        int[][] cache = new int[m][n + 1];
        int max = 0;
        for (int i = 0; i < m; i++) {
            cache[i][0] = 0;
            for (int j = 1; j < n + 1; j++) {
                cache[i][j] = cache[i][j - 1] + a2[i][j - 1];
            }


        }


        for (int i = 0; i < n - 1; i++)
            for (int j = i + 1; j < n; j++) {
                int[] t = new int[m];
                for (int k = 0; k < m; k++) {
                    t[k] = cache[k][j + 1] - cache[k][i];
                }

                max = Math.max(max, getLongestOne(t));
            }
        return max;

    }


    public static void main(String[] args) {
        int[] a = {-1, 2, 3, -5};
        int[][] b = {{-1, 2, 3, -5}, {0, 3, 5, 0}};

        System.out.println(getLongestOne(a));
        System.out.println(getLongestTwo(b, 2, 4));
    }


}
 

 

分享到:
评论
1 楼 zengloveyuan 2012-07-27  
请教个问题,getLongestOne方法中,如果要打印出这个最大连续数组,应该怎么写

相关推荐

    求极值_C++_源码.zip

    - 分治法:将大问题分解为小问题,逐个解决,例如Kadane's algorithm用于求解一维数组的最大子数组和。 - 贪心算法:每次做出局部最优决策,逐步达到全局最优,例如Prim's或Kruskal's算法用于求解最小生成树。 ...

    基于LabVIEW 的极值查找

    - 使用移位寄存器从数组中索引出连续的三个随机数。 - 条件结构用于比较这三个数的大小关系,确定极值点。 - 如果中间的数值大于前一个数值且小于后一个数值,则中间数值为极小值; - 如果中间的数值小于前一个...

    三峡大学算法设计与分析论文-倍增思想在算法运用与实现

    2.3 **区间极值问题(RMQ,Range Minimum/Maximum Query)**:在一个数组中,查询某个连续子数组内的最小或最大值。倍增算法通过构建ST表(Sparse Table)预先计算每个2的幂次子数组的极值,然后快速获取任意区间内...

    ACM模板大全

    最大连续子序列问题,也称为最大子数组问题,是要求找出数组中和最大的连续子数组。 上述提到的内容包含了ACM竞赛中的一些重要知识点和算法模板。掌握这些模板,对于提高解决ACM问题的效率和准确性具有重要作用。在...

    数学建模的常用方法及思想

    5. **变分法**:在寻找极值问题解的过程中,通过变分原理将原问题转化为求泛函的极值问题。 6. **图论法**:利用图的结构和性质解决网络优化、路径规划等问题,如最小生成树、最短路径算法等。 7. **层次分析法...

    十五个经典算法研究与总结

    快速排序是一种高效的排序算法,采用分治法的思想,通过选择一个“基准”元素,将数组分成两个子数组,分别包含小于和大于基准的元素,然后递归地对这两个子数组进行排序。 **关键步骤:** 1. **选择基准**:从...

    FORTRAN-suanfa.rar_Fortran

    4. **优化算法**:包括梯度下降法、牛顿法、拟牛顿法、遗传算法、粒子群优化等,这些算法在寻找函数极值或最小化问题中发挥作用。 5. **统计分析**:可能会包含均值、中位数、标准差、回归分析、假设检验等统计计算...

    高等数学(同济大学第五版)

    - 导数与微分:导数是描述函数变化率的工具,用于分析函数的局部性质,如单调性、极值和拐点。微分则是导数的应用,微分法用于求解最优化问题。 - 积分学:包括不定积分和定积分,积分是导数的逆运算,可以用来求...

    哈工大威海matlab

    数值积分和微分是解决连续问题的关键,而符号计算则允许进行精确的数学运算,而不是近似值。 学习MATLAB的一个有效方法是通过实践,频繁地使用和熟悉各种函数。结合实际课程内容,将MATLAB应用到具体问题中,可以...

    线段树PPT两个,所有常规用法

    2. 最值查询:可以快速找到区间内的最大值或最小值,适用于寻找连续序列中的局部极值。 3. 计数:对于区间内满足特定条件的元素个数进行计数,如统计区间内大于某个值的元素数量。 4. 模块化操作:线段树可以扩展...

    matlab数学建模编程资料

    **模拟时间**:包括离散事件模拟和连续时间模拟。 **模拟语言**:专门用于模拟的编程语言和工具。 **随机数的模拟**:使用随机数生成器进行仿真。 #### 二、蒙特卡罗模拟法 **模拟寻求近似圆周率**:使用随机...

    十五个经典算法研究与总结、目录+索引(by_July)定稿版

    递归地对左右子数组进行快速选择操作。 - **优化**:选择合适的基准可以显著提高算法的性能,例如可以选择中位数作为基准。 #### 十五、多项式乘法与快速傅里叶变换 多项式乘法是指两个多项式的乘积运算,而快速...

    算法-数列分块入门 2(LibreOj-6278).rar

    数列分块的核心思想是将一个长数列分成若干个较小的连续子序列,每个子序列称为一个“块”。这样做的好处在于可以减少某些操作的时间复杂度,比如查询、更新或者维护数列中的元素。当处理的数列非常大,直接线性扫描...

    Excel2010函数查询手册

    除了基础的数学和三角函数,SUMPRODUCT用于计算数组间元素的乘积之和,而SUMSQ、SUMX2MY2、SUMX2PY2、SUMXMY2则涉及向量和矩阵的运算。TAN、TANH函数继续扩展三角函数的功能,TRUNC函数则用于截断数字至特定的小数...

    北京交通大学925数据结构2021年初试大纲.pdf

    - **广义表的定义及其存储结构**:包括广义表的头尾和子表两种分析方法。 **六、树和二叉树** - **二叉树的结构特点**:包括二叉树的性质和遍历算法。 - **树的存储结构**:如孩子兄弟表示法。 - **最优二叉树**:...

    XIELV.rar_labview 斜率_斜率 曲线

    在连续函数中,斜率可以帮助我们了解函数的变化趋势和局部性质,例如拐点、极值等。 LabVIEW中的斜率计算通常涉及到以下步骤: 1. 数据采集:首先,你需要获取曲线的数据。这可能来自实验测量、模拟数据或已知函数...

    matlab函数大全(附有详细解释).docx

    45. `dir`: 列出目录中的文件和子目录。 46. `dirac`: 单位冲激函数,用于信号处理。 47. `dsolve`: 解常微分方程,支持符号计算。 48. `eedit`: 编辑矩阵或打开M文件,进行交互式编辑。 49. `Ei`: Maple中的指数...

    注册电气工程师考试大纲.docx

    - **导数与微分的应用**: 包括函数增减性、凹凸性、极值问题等。 **1.3 积分学** - **不定积分与定积分**: 不定积分是求导的逆运算,定积分用来计算面积、体积等。 - **广义积分**: 用于处理不连续或无穷大的情况...

    计算机数据结构与算法常用英语词汇

    - **array (数组)**:元素连续存储的序列。 - **tree (树)**:层次结构,每个节点最多有一个父节点,但可以有任意数量的子节点。 - **graph (图)**:节点和边组成的集合,表示实体之间的关系。 掌握这些专业术语,...

    用python中的matplotlib绘制方程图像代码

    为了绘制二维图形,我们需要将一维的x和y数组转化为二维的网格。这可以通过numpy的`meshgrid`函数实现,它会返回两个相互关联的网格矩阵,一个对应x值,另一个对应y值。 ```python x, y = np.meshgrid(x, y) ``` ...

Global site tag (gtag.js) - Google Analytics