(java)Maximum Subarray
2016-01-08 11:44
387 查看
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
思路:还是典型的贪心,设置一个maxsum和sum,循环遍历这个数组,当maxsum <sum时,maxsum=sum;
当sum<0 时,将前面的丢弃,sum=0,重新开始;
注意边界nums[i]都是小于0的,返回那个最大的数。
代码如下(已通过leetcode)
public class Solution {
public int maxSubArray(int[] nums) {
boolean flag=true;
int j=0;
int temp=-Integer.MIN_VALUE;
while(j<nums.length){
if(nums[j]>0){
flag=false;
break;
}
if(nums[j]>temp) temp=nums[j];
j++;
}
if(flag) return temp;
int sum=0;
int maxsum=0;
for(int i=0;i<nums.length;i++){
sum=sum+nums[i];
if(sum>maxsum) maxsum=sum;
if(sum<0) sum=0;
}
return maxsum;
}
}
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.
思路:还是典型的贪心,设置一个maxsum和sum,循环遍历这个数组,当maxsum <sum时,maxsum=sum;
当sum<0 时,将前面的丢弃,sum=0,重新开始;
注意边界nums[i]都是小于0的,返回那个最大的数。
代码如下(已通过leetcode)
public class Solution {
public int maxSubArray(int[] nums) {
boolean flag=true;
int j=0;
int temp=-Integer.MIN_VALUE;
while(j<nums.length){
if(nums[j]>0){
flag=false;
break;
}
if(nums[j]>temp) temp=nums[j];
j++;
}
if(flag) return temp;
int sum=0;
int maxsum=0;
for(int i=0;i<nums.length;i++){
sum=sum+nums[i];
if(sum>maxsum) maxsum=sum;
if(sum<0) sum=0;
}
return maxsum;
}
}
相关文章推荐
- java根据层次遍历建立二叉树
- Java 面向对象理解
- java多线程实例
- java过滤器(转载)自己学习
- 配置SpringMVC返回JSON遇到的坑
- java中super()和this()浅析
- maven的坑: Exception in thread "pool-1-thread-1" java.lang.NoClassDefFoundError: org/eclipse/aether/spi/connector/Transfer$State
- (java)Jump Game II
- 【第六章】 AOP 之 6.7 通知顺序 ——跟我学spring3
- 浅谈java内存泄漏
- JAVA访问数据库之增删改查(CRUD)
- 【第六章】 AOP 之 6.6 通知参数 ——跟我学spring3
- java环境配置
- java.lang.OutOfMemoryError:GC overhead limit exceeded填坑心得
- 从头认识java-17.2 基本的线程机制(1)-初识多线程-1
- springboot 构建微服务设置远程调试
- JAVA线程锁lock下Condition高级使用-多个Condition的整合使用
- java基础-参数数量可变的方法
- 第七章 常用Java集合类总结
- JAVA线程锁lock下Condition的使用