首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

算法导论之最大子

算法导论》一书中对最大字段可谓讲的是栩栩如生,楚楚动人。如果简单说最大字段,没有意义。而《算法导论》上举了一个股票例子。...根据股票每天结束价格来求出一时间内何时买入何时卖出能是收益最大。...把问题做一个转换,求出相邻天数股票价格差值(周二 - 周一 = 差值),然后求出连续天数差值最大值,即为最大收益,所以就是最大子问题。   ...还有一点说明算法实现是语言没有关系,下面是用OC来实现,你也可以用Java, PHP, C++等你拿手语言进行实现,算法注重还是思想。   ...如果数组中又两个数那么就是两个数,运行结果如下: ?       下面是10个数据运行结果,最大子数组肯定是包括array[mid]这一项,因为我们求得就是过中点最大字段。 ?

96070
您找到你想要的搜索结果了吗?
是的
没有找到

【题解】最大子

题目描述 给出一个长度为 n 序列 a,选出其中连续且非空使得这段最大。 输入格式 第一行是一个整数,表示序列长度 n。...输入输出样例 输入 #1 7 2 -4 3 -1 2 -4 3 输出 #1 4 说明/提示 样例 1 解释 选取 [3,5] 子 {3,−1,2},其为 4。...除了之前题目中双指针,骑士也能够用队列来进行处理,又或者是具有相似概念东西。 仔细阅读题目,可发现题目要求是连续且非空大子。 若用暴力方式处理复杂度为 图片 根据数据范围明显不可取。...该区间元素必须连续,那么当碰见一个新元素,无非出现两种情况: 该元素与之前连续区间加起来比较大 该元素与之前连续区间加起来还没有这个元素本身大 如果是情况1,那么连续区间总和就加上新增元素...前面的一组成新序列 */ int main(){ int n; int sum=0;//连续序列 int ans=-1e9;//最大连续序列 cin>>n;

23910

大子问题

如果该序列所有元素都是负整数时定义其最大子为0。 例如(-2,11,-4,13,-5,2)大子为20,所求子区间为[2,4]。...问题分析: 直接想法就是利用遍历法遍历所有的可能,然后找到最大那个,显然这不是一种有效方法,但切实可行。...首先我们需要一个循环来遍历从第一个位置到最后一个位置:for(int i = 0;i < n; i++),然后还需要一个内层循环来遍历从当前位置到最后一个位置,来分别计算当前大子: int maxSum...分治法: 针对最大字段这个具体问题本身结构,还可以从算法设计策略上对上述O(n²)计算时间算法加以更深刻改进。...如果将给定序列a[1..n]分成长度相等a[1..n/2]a[n/2+1:n],分别求出这两最大字段

98950

P1115 最大子

题目描述 给出一序列,选出其中连续且非空使得这段最大。 输入输出格式 输入格式: 输入文件maxsum1.in第一行是一个正整数N,表示了序列长度。...第2行包含N个绝对值不大于10000整数A[i],描述了这段序列。 输出格式: 输入文件maxsum1.out仅包括1个整数,为最大是多少。子最小长度为1。...输入输出样例 输入样例#1: 7 2 -4 3 -1 2 -4 3 输出样例#1: 4 说明 【样例说明】2 -4 3 -1 2 -4 3 【数据规模与约定】 对于40%数据,有N ≤ 2000...对于100%数据,有N ≤ 200000。...对于这个题,我们可以考虑用贪心做法来求解,首先我们可以认为,当一个数为负数时,当他加上一个数,仍然不如只算加上那个数划算,所以我们可以将sum<0时候吧sum变成0 然后在每个解中求最大值 1

61850

对最大子理解(动态规划)

问题 对一个长度为n数组,找到连续,使它和在所有子中是最大。 比如3,4,-9,6。他们大子是7。...解法 A.遍历 O(n)=n^2 B.分治算法 O(N)=N*logN 数组分为Left与Right部分,最大字段要么在left,要么在right,要么必然包括mid-1与mid+1(这种情况复杂度仅为...左最大子5,右最大子15,经过3与-5大子15。三者选最大15作为结果。 C.动态规划 将输入数组描述为a1到an整数序列,令bj为a1到aj序列中包含aj大子。...由此可以推导,最大字段是b1到bn集合中最大值。 其实动态规划解法是分治解法特殊情况,即right长度为1.此时最大子,要么在左边,要么从mid+1开始向左找。...此时最大子仍然要么在左边,要么从mid+1向左找,但向左找过程可以简化成常数时间(不直接找最大子,而是找b,仅仅找经过aj大子),也就是说不用考虑mid+1以外项开头

85630

蓝桥杯 最大子阵(前缀+最大子)--------C语言—菜鸟级

/* 给定一个n*m矩阵A,求A中一个非空子矩阵,使这个子矩阵中元素最大。 其中,A子矩阵指在A中行列均连续一块。 样例说明 取最后一列,为10。...数据规模和约定 对于100%数据,1< =n, m< =500,A中每个元素绝对值不超过5000。 输入 输入第一行包含两个整数n, m,分别表示矩阵A行数列数。...输出 输出一行,包含一个整数,表示A中最大子矩阵中元素。...样例输入 3 3 -1 -4 3 3 4 -1 -5 -2 8 样例输出 10 提示 思路: 行前缀(对行区间求和) + 最大子原理 (对列区间求和) */ #include<stdio.h...} for(i=1;i<=n;i++)//枚举 从 子阵行高 按 最大子 原理 求和 for(j=i;j<=n;j++) { ans=0; for(k=1;

39920

贪心算法:最大子

大子 题目地址:https://leetcode-cn.com/problems/maximum-subarray/ 给定一个整数数组 nums ,找到一个具有最大和连续子数组(子数组最少包含一个元素...局部最优:当前“连续”为负数时候立刻放弃,从下一个元素重新计算“连续”,因为负数加上下一个元素 “连续”只会越来越小。...全局最优:选取最大“连续” 「局部最优情况下,并记录最大“连续”,可以推出全局最优」。...「这相当于是暴力解法中不断调整最大子区间起始位置」。 「那有同学问了,区间终止位置不用调整么? 如何才能得到最大“连续”呢?」...例如如下代码: if (count > result) result = count; 「这样相当于是用result记录最大子区间(变相算是调整了终止位置)」。 如动画所示: ?

78020

☆打卡算法☆LeetCode 53、最大子 算法解析

一、题目 1、算法题目 “给定一个整数数组,找到最大和连续子数组,返回其最大和。” 题目链接: 来源:力扣(LeetCode) 链接:53....最大子 - 力扣(LeetCode) (leetcode-cn.com) 2、题目描述 给定一个整数数组 nums ,找到一个具有最大和连续子数组(子数组最少包含一个元素),返回其最大和。...示例 1: 输入: nums = [-2,1,-3,4,-1,2,1,-5,4] 输出: 6 解释: 连续子数组 [4,-1,2,1] 最大,为 6 。...假设数组长度是n,下标是0到n-1,f(i)代表连续子数组最大和,那么只需要求出每个位置f(i),不就找到最大和了吗? 那么怎么求每个位置f(i)呢?...我回顾我光辉时刻 就是不同人在一起,变得更好最长连续时刻

25220

大子序列问题之算法优化

治:将若干个问题解4合并到一起并可能再做少量附加工作,最后得到整个问题解。 在这个问题中,最大子序列可能在三处出现:即左半部序列、右半部序列、穿过中部从而占据左右两半部分序列。...故该序列大子序列为max(6,4,0)= 6。 时间复杂度分析: 假设T(n)为求解大小为n大子序列问题所花费时间。...算法四: 算法三利用递归较好解决了最大子序列问题,但仔细分析,在递归过程中,同一个元素很可能多次被操作,有没有更高效算法?先上代码!...)如果大于0,不管当i > t元素大小如何,加上thisSum总会使之后变大,而如果thisSum小于0,肯定会使之后变小 ,既然还会变小,那干脆就重新来过(thisSum = 0),有些另起炉灶意味...不仅如此,在任意时刻,该算法都能对它已经读入数据给出子序列问题正确答案(其他算法即前三种不具有这个特性)。具有这种特性算法叫做联机算法(online algorithm)。

1.1K70

大子序列问题之算法优化

治:将若干个问题解4合并到一起并可能再做少量附加工作,最后得到整个问题解。 在这个问题中,最大子序列可能在三处出现:即左半部序列、右半部序列、穿过中部从而占据左右两半部分序列。...故该序列大子序列为max(6,4,0)= 6。 时间复杂度分析: 假设T(n)为求解大小为n大子序列问题所花费时间。...---- 算法四: 算法三利用递归较好解决了最大子序列问题,但仔细分析,在递归过程中,同一个元素很可能多次被操作,有没有更高效算法?...)如果大于0,不管当i > t元素大小如何,加上thisSum总会使之后变大,而如果thisSum小于0,肯定会使之后变小,既然还会变小,那干脆就重新来过(thisSum = 0),有些另起炉灶意味...不仅如此,在任意时刻,该算法都能对它已经读入数据给出子序列问题正确答案(其他算法即前三种不具有这个特性)。具有这种特性算法叫做联机算法(online algorithm)。

71730

画解算法:53. 最大子

示例: 输入: [-2,1,-3,4,-1,2,1,-5,4], 输出: 6 解释: 连续子数组 [4,-1,2,1] 最大,为 6。...进阶: 如果你已经实现复杂度为 O(n)解法,尝试使用更为精妙分治法求解。...解题方案 思路 标签:动态规划 这道题用动态规划思路并不难解决,比较难是后文提出用分治法求解,但由于其不是最优解法,所以先不列出来 动态规划是首先对数组进行遍历,当前最大连续子序列为sum,...ans 如果sum > 0,则说明sum对结果有增益效果,则sum保留并加上当前遍历数字 如果sum <= 0,则说明sum对结果无增益效果,需要舍弃,则sum直接更新为当前遍历数字 每次比较 sum ...后台回复「算法」,加入天天算法群觉得算法直击灵魂,欢迎点击在看转发

52720

Python|贪心算法解最大子

2 思路描述 第一时间想到的当然是暴力解决,基本思路就是遍历一遍,用两个变量,一个记录最大,一个记录当前。...后面发现可以用贪心算法来解比较简单其基本思路是正在访问节点值+此节点之前最大值如果大于当前节点,则更新最大值为,否则更新最大值为当前节点。...): # 当当前序列加上此时元素值大于tmp值,说明最大序列可能出现在后续序列中,记录此时最大值 if tmp + nums[i]>nums[i]:...以该元素为起点继续找最大子序列, # 并记录此时最大值 max_ = max(max_, tmp, tmp+nums[i], nums[i])...每一步只考虑一个数据,选取应该满足局部优化条件。若下一个数据部分最优解连在一起不再是可行解时,就不把该数据添加到部分解中,直到把所有数据枚举完,或者不能再添加算法停止。

72310
领券