leetcode 53. Maximum Subarray(分治,递归)
来源:互联网 发布:iphonex专用软件 编辑:程序博客网 时间:2024/05/01 09:06
找到中间位置,所求子串不是在中间位置的左边,就是右边,还有中间位置两边。中间位置左边右边的和最大的子串可以递归地求得,再求中间位置往左挨个加的最大和以及中间位置往右挨个数的最大和,这两个和就是子串跨越中间位置时的最大和;
这三个最大和中的最大值就是所求最大值。
这道题好像在剑指offer见过额
package leetcode53MaximumSubarray;import java.util.Arrays;public class Solution {public int maxSubArray(int[] nums) { int res=0,i; int len = nums.length; int middle = len/2; if(len == 2) { if(nums[0]>=0&&nums[1]>=0) return nums[0]+nums[1]; return nums[0]>nums[1]?nums[0]:nums[1]; } if(len == 1) { return nums[0]; } int maxSubLeft,maxSubRight,maxSubMiddle; //System.out.println(0+middle-1); maxSubLeft = maxSubArray(Arrays.copyOfRange(nums, 0, middle)); maxSubRight = maxSubArray(Arrays.copyOfRange(nums, middle,len )); int maxMiddleLeft = Integer.MIN_VALUE; int temp = 0; for(i=middle-1;i>=0;i--) { temp+=nums[i]; if(temp>maxMiddleLeft) maxMiddleLeft=temp; } int maxMiddleRight = Integer.MIN_VALUE; temp = 0; for(i=middle;i<=len-1;i++) { temp+=nums[i]; if(temp>maxMiddleRight) maxMiddleRight=temp; } int maxMiddle = maxMiddleLeft + maxMiddleRight; if(maxMiddle>=maxSubLeft && maxMiddle>=maxSubRight) res = maxMiddle; if(maxSubLeft>=maxMiddle && maxSubLeft>=maxSubRight) res = maxSubLeft; if(maxSubRight>=maxMiddle && maxSubRight>=maxSubLeft) res = maxSubRight; return res; }public static void main(String args[]){int[] nums = {1,2,-1};//int[] nums = {-2,1,-3};int res = new Solution().maxSubArray(nums);System.out.println(res);}}
0 0
- leetcode 53. Maximum Subarray(分治,递归)
- LeetCode 53. Maximum Subarray--Divide and Conquer(分治法)
- Maximum Subarray(分治法)
- LeetCode-53-Maximum Subarray(DP/分治)-Medium
- [LeetCode]53.Maximum Subarray
- LeetCode --- 53. Maximum Subarray
- [Leetcode] 53. Maximum Subarray
- [leetcode] 53.Maximum Subarray
- 【leetcode】53. Maximum Subarray
- [leetcode] 53.Maximum Subarray
- 【leetcode】53. Maximum Subarray
- LeetCode 53. Maximum Subarray
- [LeetCode]53. Maximum Subarray
- 53. Maximum Subarray LeetCode
- [LeetCode]53. Maximum Subarray
- leetcode 53. Maximum Subarray
- [leetcode] 53. Maximum Subarray
- LeetCode *** 53. Maximum Subarray
- Count and Say
- 前端开发的模块化和组件化的定义,以及两者的关系?
- devexpress 破解版消除运行弹窗
- JQuery实现搜索关键词变红,包含关键词的div显示,无div的隐藏
- 只属于我自己的2016
- leetcode 53. Maximum Subarray(分治,递归)
- 2016年度GitHub上Stars最多的项目
- “兴趣爱好”,蜜糖or砒霜?
- 基本3D变换之World Transform, View Transform and Projection Transform
- 如何使用github自制Android library开源依赖。可以生成gradle、maven、sbt、leigingen等版本
- ubuntu下安装程序的三种方法
- wold 2016 ~!
- EF6+Oracle问题总结
- new1