[Java]LeetCode53 Maximum Subarray
2015-07-30 16:18
405 查看
Find the contiguous subarray within an array (containing at least one number) which has the largest sum.
For example, given the array
the contiguous subarray
题意:就是找出数组中最大值的字串。这一题不是很难,关键在于分析。我们发现如果有正数,那最大值的子串肯定是从正数开始,但如果全是负数的话,那最大值肯定是最大负数。
第一版代码:这是第一版代码,逻辑不是很紧密,代码也很冗余,但是大致的思想是这样的。
For example, given the array
[−2,1,−3,4,−1,2,1,−5,4],
the contiguous subarray
[4,−1,2,1]has the largest sum =
6.
题意:就是找出数组中最大值的字串。这一题不是很难,关键在于分析。我们发现如果有正数,那最大值的子串肯定是从正数开始,但如果全是负数的话,那最大值肯定是最大负数。
第一版代码:这是第一版代码,逻辑不是很紧密,代码也很冗余,但是大致的思想是这样的。
public int maxSubArray(int[] nums) { int len=nums.length; if(len==0)return 0; int sum=nums[0]; int max=sum; for(int i=1;i<len;i++) { if(sum>=0) { //若此时的nums[i]<0 if(nums[i]<0) { if(max<sum)max=sum;//记录前边的已经遍历过的最大值 } sum+=nums[i]; }else { //sum<=0 if(max<nums[i])max=nums[i];//全是负数的情况下,找出最大值。 sum=nums[i]; } } return max>sum?max:sum; }第二版代码:
public int maxSubArray(int[] nums) { int len=nums.length; if(len==0)return 0; int sum=nums[0]; int max=sum; for(int i=1;i<len;i++) { if(sum>=0)//正数进行累加 sum+=nums[i]; else//如果是负数的话,就不要累加了 sum=nums[i]; max=Math.max(max,sum); } return max; }
相关文章推荐
- struts2 自定义类型转换器
- springMVC开发之一DispatcherServlet(转)
- Java内存泄露的理解与解决
- 利用java实现单词倒序排列
- java 过滤器详细知识
- JDK安装与环境变量配置
- (转)20个非常有用的Java程序片段
- Java 内存管理
- 【JAVA】java中CyclicBarrier的用法,实例讲解
- Spring -- 基于XML的AOP通知配置
- spring事务声明的几种传播特性
- Spring中使用到的设计模式 - 策略模式
- Java输出日历
- java的循环引用
- java基本类型的内存中占用字节数
- Java基础——其他类对象,IO流
- Spring学习笔记--依赖注入
- spring的事务中程序控制事务成功失败(Transaction marked as rollback)
- Spring Boot 使用
- java string equal出现的问题