LeetCode - Maximum Subarray
生活随笔
收集整理的這篇文章主要介紹了
LeetCode - Maximum Subarray
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
題目:
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.
思路:
保存兩個值max和leftSum,max就是到目前為止所能得到的最大值,leftSum為包含當前元素的最大子串之和。然后從左往右掃,下面的代碼的if else語句把各種情況都擺明了。
package array;public class MaximumSubarray {public int maxSubArray(int[] nums) {int n;if (nums == null || (n = nums.length) == 0) return 0;int max = nums[0];int leftSum = nums[0];for (int i = 1; i < n; ++i) {if (nums[i] >= 0) {if (leftSum >= 0) {leftSum += nums[i]; } else {leftSum = nums[i];}if (max < leftSum)max = leftSum;} else {if (leftSum + nums[i] >= 0) {leftSum += nums[i];} else {leftSum = nums[i];}if (max < leftSum)max = leftSum;}}return max;}public static void main(String[] args) {// TODO Auto-generated method stubint[] nums = { /*-2,1,-3,4,-1,2,1,-5,4*/ -2, -1 };MaximumSubarray m = new MaximumSubarray();System.out.println(m.maxSubArray(nums));}}這個代碼可以合并,如下:
package array;public class MaximumSubarray {public int maxSubArray(int[] nums) {int n;if (nums == null || (n = nums.length) == 0) return 0;int max = nums[0];int leftSum = nums[0];for (int i = 1; i < n; ++i) {if (leftSum >= 0 && leftSum + nums[i] >= 0) {leftSum += nums[i];} else {leftSum = nums[i];}if (max < leftSum)max = leftSum;}return max;}public static void main(String[] args) {// TODO Auto-generated method stubint[] nums = { -2, -1 };MaximumSubarray m = new MaximumSubarray();System.out.println(m.maxSubArray(nums));}}?
總結
以上是生活随笔為你收集整理的LeetCode - Maximum Subarray的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Linux性能调优、Linux集群与存储
- 下一篇: hibernate简单应用