zoukankan      html  css  js  c++  java
  • LeetCode 53. Maximum Subarray Java

    题目:

    Find the contiguous subarray within an array (containing at least one number) which has the largest sum.

    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.

    题意:查找一个数组的子数组,使得子数组的和最大。我最开始使用暴力求解,即分别对子数组只有1、2、3、...、n个元素的情况进行穷举,找出最大的值,但是意料之中,在最后几个测试用例中会超时。我们观察可以发现,从头遍历数组,对当前元素只有两种情况:

    (1)如果当前元素加入之前的子数组大于能使子数组变大,则加入之前的子数组

    (2)如果当前元素比之前子数组加现在的元素的和还要大,则自己重开一组

    所以利用一个sum,记录遍历到当前元素时的最大子数组和,和全局数的max比较,最后得出最大子数组。

    AC的代码:

    public class Solution {
        public int maxSubArray(int[] nums) {
            int max=nums[0];		//记录最大值
    		
    		int sum = nums[0];
    		
    		for(int i=1;i<nums.length;i++){
    			sum=Math.max(nums[i], sum+nums[i]);	//用来记录当前的最大值
    			max = Math.max(max, sum);
    		}
    		
    		return max;
        }
    }
    

    超时的代码:

    public class Solution {
    
    	public int maxSubArray(int[] nums) {
    		int max=nums[0];
            for(int i=1;i<=nums.length;i++){
            	for(int j=0;j<=nums.length-i;j++){
            		int temp=0;
            		for(int k=j;k<j+i;k++){
            			temp+=nums[k];
            		}
            		if(temp>max){
            			max=temp;
            		}
            	}
            }
            return max;
        }
    }
  • 相关阅读:
    20个最佳的Java集合框架面试题目
    SSL/TLS 加密新纪元
    NServiceBus-日志
    NServiceBus-容器
    NServiceBus-网关和多站点分布
    NServiceBus-性能测试
    NServiceBus教程-持久化配置
    NServiceBus教程-持久化
    NServiceBus教程-NServiceBus和WCF
    NServiceBus教程-消息传递与处理
  • 原文地址:https://www.cnblogs.com/271934Liao/p/6906860.html
Copyright © 2011-2022 走看看