【数据结构与算法】最大子序列
来源:互联网 发布:软件框架设计工具 编辑:程序博客网 时间:2024/06/01 07:20
今天在刷leetcode的时候,发现了一个求最大子序列的算法,Kadane算法。
最大子序列问题,给定一个数组,求出最大的连续元素之和。
Kadane算法是DP(动态编程)的一种。思路是求出以数组中所有元素为结尾的最大子序列,返回其中最大的。max_cur表示以当前元素为结尾的子序列最大和,max_array表示所有当中的最大和,代码相当简洁。
如果要求不能返回负数和:
public int max_subarray(int[] nums) {int max_cur = 0, max_subarray = 0;for (int i = 0; i < nums.length; i++) {max_cur = Math.max(0, max_cur + nums[i]);max_subarray = Math.max(max_cur, max_subarray);}return max_subarray;}
如果可以返回负数和:
public int max_subarray(int [] nums){int max_cur = nums[0], max_subarray = nums[0];for(int i = 0; i < nums.length; i++){max_cur = Math.max(nums[0], max_cur + nums[i]);max_subarray = Math.max(max_cur, max_subarray);}return max_subarray;}可以看到上述算法在On时间内解决问题。
这种思路可以延伸到其他以子序列为背景的问题中,比如leetcode的121题https://leetcode.com/problems/best-time-to-buy-and-sell-stock/
求子序列首尾元素差值的最大。
public int maxProfit(int[] prices) {int max_cur = 0, max_profit = 0;for(int i = 1; i < prices.length; i++){max_cur = Math.max(max_cur + prices[i] - prices[i - 1], 0);max_profit = Math.max(max_cur, max_profit);}return max_profit;}
0 0
- 数据结构与算法 求最大子序列
- 【数据结构与算法】最大子序列
- 【算法与数据结构】最大子序列和问题
- 数据结构与算法分析之最大子序列和
- 【数据结构与算法分析】2.4 求最大子序列和
- 用Python 学习数据结构与算法 六、最大子序列
- 【数据结构与算法】最大子序列和问题的求解
- 数据结构与算法分析--最大子序列和问题
- <数据结构与算法分析 C++描述>算法分析之最大子序列和问题
- 《数据结构与算法分析》笔记------第二章、最大子序列和问题的解
- 【面试之旅—算法与数据结构-1】 最大最长子序列
- 数据结构与算法分析——最大的子序列和问题
- 数据结构与算法分析 学习笔记——最大子序列求和问题
- 第7周 数据结构与算法分析 2-8求最大子序列的函数
- [数据结构与算法分析]最大子序列和问题 -学习笔记
- 【数据结构与算法】小于等于k的最大连续子序列和
- 最大子序列算法
- 数据结构 最大子序列和
- 欢迎使用CSDN-markdown编辑器
- 线索二叉树(下)
- 手机无须ROOT不用修改hosts即可在本地测试安卓、苹果APP和H5应用
- Eclipse启动Tomcat端口被占用解决方法
- Spring Extensible XML
- 【数据结构与算法】最大子序列
- 四大组件之Activity(活动)小结
- GraphicsWindowQt类参考
- 辽宁舰穿越台湾海峡背后内幕揭秘:竟是围魏救赵
- 使用SpannableStringBuilder打造超炫酷的TextView
- 腾讯XLua 02-UI事件与事例API
- 401. Binary Watch*
- removeAttr() 和 removeProp() 以及 removeClass("类名")和removeClass()的区别
- Android 6.0之后的动态权限