#剑指offer(17)--连续子数组的最大和
来源:互联网 发布:arm linux 开机启动 编辑:程序博客网 时间:2024/05/17 03:30
输入:连续输入一个整型数组,数组里有正数也有负数,数组中一个或连续的多个整数组成一个子数组,求所有子数组的和的最大值,要求时间复杂度为O(n)。
利用动态规划:
1.新建数组re(与输入数组arr一样大)
2.re[i]表示以第i个数字结尾的子数组的最大和,然后在数组re中求出最大值
3.初始状态下re[0] = arr[0]
4.a.如果re[i-1]<0,则re[i] = arr[i]
b.否则re[i] = re[i-1]+arr[i]
java实现:
public class 连续子数组的最大和 { public static void main(String[] args) { // TODO Auto-generated method stub int[] arr = new int[]{-1,2,3,10,-4,7,-2,-5}; f1(arr); f2(arr); } ///方法1 找规律 static void f1(int[] arr){ int max = arr[0] ; int lastValue = arr[0]; for(int i = 1;i <arr.length;i++){ max = Math.max(max, lastValue); if(lastValue< 0){ lastValue = 0; } lastValue = lastValue+arr[i]; } max = Math.max(max, lastValue); System.out.println(max); } //动态规划 static void f2(int[] arr){ int[] re = new int[arr.length]; re[0] = arr[0]; for(int i = 1 ; i<arr.length;i++){ if(re[i-1]<0){ re[i] = arr[i]; }else { re[i] = re[i-1] + arr[i]; } } int max = re[0]; for(int i = 0;i<re.length;i++){ max = Math.max(max, re[i]); } System.out.println(max); }}
阅读全文
0 0
- #剑指offer(17)--连续子数组的最大和
- 剑指offer(32):连续子数组的最大和
- 剑指offer(27)-连续子数组的最大和
- 连续子数组的最大和(剑指Offer)
- 剑指offer系列源码-最大子向量和(连续子数组的最大和)
- 【剑指offer之最大子向量和(连续子数组的最大和)】
- [剑指offer]连续子数组最大和
- 剑指offer-最大连续子数组和
- 剑指offer:连续子数组最大和
- 剑指offer---连续子数组最大和
- 【剑指offer】连续子数组最大和
- 剑指offer:31-连续子数组的最大和
- 剑指Offer之连续子数组的最大和
- 【剑指offer】连续子数组的最大和
- 剑指offer-31:连续子数组的最大和
- 剑指offer--连续子数组的最大和
- 剑指Offer之 - 连续子数组的最大和
- 剑指offer之连续子数组的最大和
- 属性动画
- ViewPager+Fragment的实现及禁止滑动
- 移动web问题小结
- struts之国际化的实现操作
- 第十二节、css进阶:消除未使用的css
- #剑指offer(17)--连续子数组的最大和
- activiti工作流任意节点撤回
- log4j.properties 配置
- 基于SpringBoot + Mybatis实现SpringMVC Web项目
- mongodb group by 多字段/distinct等
- linux下网络丢包问题处理--overruns不断增加
- 欢迎使用CSDN-markdown编辑器
- Linux网络配置
- 搭建SVN服务器详细教程