![](https://img-blog.csdnimg.cn/20201014180756928.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
编程之美
文章平均质量分 54
ZiZhanOld
计算机软件与理论专业 硕士研究生 在读
展开
-
编程之美-2.13 子数组最大乘积
问题描述:给定一个长度为N的数组,只允许用乘法,不允许用除法,计算任意N-1个数的组合乘积中的最大的一组,并写出算法时间复杂度。 按照编程之美一书中所描述的解法1,时间复杂度O(N)。 基本原理:第i个元素被排除在乘积之外,则其他N-1个元素之积 subProductI [ i ]=preI[i] *postI[i]; preI[i] 为第1-(i-1)个元素之积,postI[i]为第(i+1原创 2017-04-18 19:45:12 · 287 阅读 · 0 评论 -
编程之美-2.14 求数组的子数组之和的最大值
如题,给一个数组A,求这个数组的子数组之和的最大值。注意:这里的子数组为连续的,只需要求和,不需要返回子数组的具体位置。 根据书上的解法3,用startNum表示连续子数组的开始值,用maxSum表示子数组之和的最大值,二者均初始化为A[0],然后通过遍历数组A,不断更新startNum和maxSum,最终返回maxSum。 代码如下: #include #include using原创 2017-04-18 20:54:31 · 391 阅读 · 0 评论 -
编程之美-2.15 子数组之和的最大值(二维)
给一个二维数组,求子数组的和的最大值,也就是求子矩阵的最大和。 这道题的解题思路与2.14求数组的子数组之和的最大值有类似之处,具体步骤如下: 设原数组为A,行数为row,列数为column. 1. 先求矩阵P(row+1,column+1), P[i,j]表示在A中以A[i-1,j-1]到A[0,0]为对角线的子矩阵的元素之和。 初始化:P[0,i]=0,i=0,1,...colum;原创 2017-04-19 15:44:51 · 304 阅读 · 0 评论 -
编程之美-2.16 求数组中最长递增子序列
写一个时间复杂度尽可能低的程序,求一个一维数组(N个元素)中的最长递增子序列的长度。 例如:在序列 1, -1,2,-3,,4, -5, 6, -7中,其最长的递增子序列为1,2,4,6。 本文使用书中的解法二: 输入数组A,长度为len。vector iLenTailMinVal(len + 1): iLenTailMinVal[I]表示长度为i的一组递增子序列中最小的尾元素的值;vect原创 2017-04-19 20:09:09 · 349 阅读 · 0 评论 -
编程之美-2.17 数组移位循环
设计一个算法,把一个含有N个元素的数组循环右移K位,要求时间复杂度为O(N),且只允许使用两个附加变量。 方法: 将数组A(含N个元素)右移K位,相当于把A分为两部分,前(N-K)个元素A1和后K个元素A2,右移的过程是将两部分交换位置,即原A=A1 A2,移位后为A'=A2 A1,A1,A2内部的元素顺序是不变的。因此具体实现可通过以下步骤完成:先将A的元素全部逆序排列(A2的元素放到A1的原创 2017-04-20 15:43:43 · 440 阅读 · 0 评论