最大子序和问题

最近找实习刷题中,遇到好多问题,有coding2小时还报错的无奈,也有战胜100%的孤独,谨在此记录一二,与君共勉。

给定一个整数数组 nums,找到一个具有最大和的连续子数组(子数组最少包含一个元素),返回其最大和(来自leetcode53题)。

先无脑写个暴力递归

class Solution {
    public int maxSubArray(int[] nums) {	
    	return getMax(nums,nums.length-1);
    }

  private int getMax(int[] nums, int index) {
	if(index=0) {
	    return nums[0];
	}
        return Math.max(chosed(nums,index-1)+nums[index],getMax(nums, index-1));
    }
	
  private int chosed(int[] nums,int index) {
        if(index<0) {
		return 0;
	}
	return Math.max(chosed(nums, index-1)+nums[index],0);
  }
}

OJ居然过了。。。


按这个递归动态规划想了好久,感觉思维僵化了,百度了一下,参考博主窗雨树雪的方法,写了个O(n)的。

class Solution {
	public int maxSubArray(int[] nums) {
		int sum = 0;
		int maxSum =Integer.MIN_VALUE;
        	//找到nums中最大值
		for (int i = 0; i < nums.length; i++) {
			if(nums[i]>maxSum) {
				maxSum = nums[i];
			}
		}
		//当一个数加上前面的和大于最大就赋值,小于零则不可能为起始位
		for (int i = 0; i < nums.length; i++) {
			sum += nums[i];
			if(sum>maxSum) {
				maxSum = sum;
			}else if(sum<0){
				sum = 0;
			}
		}
		return maxSum;
	}
}

oj:13ms,不知道为啥,插不了图片了



,还行口巴,恳请各位指正。

除特别标注引用外,以上均来自原创,如有侵权,请联系本人删除。



猜你喜欢

转载自blog.csdn.net/windddy/article/details/80219900
今日推荐