剑指Offer: (Java实现) 连续子数组的最大和
来源:互联网 发布:苹果手机 解压软件 编辑:程序博客网 时间:2024/05/23 20:17
* 类说明:输入一个整型数组,数组里有正数也有负数。数组中一个或连续的多个整数组成一个子数组。求所有子数组的和的最大值。要求时间复杂度为 O(n)。例如输入的数组为{1,-2,3,10,-4,7,2,-5},和最大的子数组为{3,10,-4,7,2}。*
* 非递归实现,打印出最大和的连续子数组的子序列; curSum表示算上当前元素的最大值,curMax表示截止到当前元素的最大值 *
public class FindMaxSerialArray01 { public static void main(String[] args) { int[] arr = {1,-2,3,10,-4,7,2,5}; int length = arr.length; int curSum = 0; int curMax = 0; int start = 0,end = 0; for(int i = 0;i< length;i++){ if( curSum <= 0){ curSum = arr[i]; start = i; }else{ curSum+= arr[i]; end = i; } if(curSum > curMax){ curMax = curSum; }else{ end--; } } System.out.print("子数组和为:"+curMax+"\n子数组为:"); for( int i= start;i<=end;i++){ System.out.print(arr[i]+" "); } }}
* 动态规划, 递归实现 . 求出length个函数的值,然后依次比较得出最大值。当i=0 or F(i-1)<=0时候:F(arr,i)= arr[i];否则F(arr,i)=arr[i]+F(arr,i-1)*
public class FindMaxSerialArray02 { public static void main(String[] args) { int[] arr = {1,-2,3,10,-4,7,2,-5}; int length = arr.length; int result = F(arr,0); for(int i=0;i<length;i++){ int a = F(arr,i); if(a >=result){ result = a; } } System.out.println(result); } public static int F(int[] arr,int i){ if(i==0){ return arr[0]; }else{ if(F(arr,i-1)<=0){ return arr[i]; }else{ return arr[i]+F(arr,i-1); } } }}
阅读全文
0 0
- 剑指offer----连续子数组的最大和----java实现
- 剑指Offer: (Java实现) 连续子数组的最大和
- 剑指offer:连续子数组的最大和(java)
- 剑指Offer:面试题31——连续子数组的最大和(java实现)
- [剑指offer]连续子数组最大和
- 剑指offer-最大连续子数组和
- 剑指offer:连续子数组最大和
- 剑指offer---连续子数组最大和
- 【剑指offer】连续子数组最大和
- 剑指offer:31-连续子数组的最大和
- 剑指Offer之连续子数组的最大和
- 【剑指offer】连续子数组的最大和
- 剑指offer-31:连续子数组的最大和
- 剑指offer--连续子数组的最大和
- 剑指Offer之 - 连续子数组的最大和
- 剑指offer之连续子数组的最大和
- 剑指offer 31 - 连续子数组的最大和
- 《剑指offer》连续子数组的最大和
- Python 对象知识实践
- 详解 ESLint 规则,规范你的代码
- 阅读XRecyclerView源码二
- 如何交换两个变量的值
- 多线程学习笔记
- 剑指Offer: (Java实现) 连续子数组的最大和
- HDU5696(分治)
- Performance Analyzer性能分析器
- WePY 在小程序性能调优上做出的探究
- 最新的100个微信小程序-极乐Store
- new Date(date).getTime()兼容性
- 目标跟踪VOT2016 BenchMark评价标准介绍
- 归并排序 单链表
- Redis的几种数据结构,和各自应用场景的列举示例