摘要:最新更新請見原題鏈接動態(tài)規(guī)劃復雜度時間空間思路這是一道非常典型的動態(tài)規(guī)劃題,為了求整個字符串最大的子序列和,我們將先求較小的字符串的最大子序列和。而最大子序列和的算法和上個解法還是一樣的。
Maximum Subarray 最新更新請見:https://yanjia.me/zh/2019/02/...
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.
原題鏈接
動態(tài)規(guī)劃 復雜度時間 O(N) 空間 O(N)
思路這是一道非常典型的動態(tài)規(guī)劃題,為了求整個字符串最大的子序列和,我們將先求較小的字符串的最大子序列和。這里我們從后向前、從前向后計算都是可以的。在從前向后計算的方法中,我們將第i個元素之前最大的子序列和存入一個一維數(shù)組dp中,對第i+1個元素來說,它的值取決于dp[i],如果dp[i]是負數(shù),那就沒有必要加上它,因為這只會拖累子序列的最大和。如果是正數(shù)就加上它。最后我們再講第i+1個元素自身加進去,就得到了第i+1個元素之前最大的子序列和。
代碼public class Solution { public int maxSubArray(int[] nums) { int[] dp = new int[nums.length]; int max = nums[0]; dp[0] = nums[0]; for(int i = 1; i < nums.length; i++){ dp[i] = dp[i-1]>0? dp[i-1] + nums[i] : nums[i]; max = Math.max(dp[i],max); } return max; } }掃描算法 復雜度
時間 O(N) 空間 O(1)
思路仔細觀察上面的代碼,我們其實只用到了dp[i-1]這個量,所以如果用一個變量記錄上次的值,那么這O(N)的空間是可以省略的。我們要做的就是掃描一遍數(shù)組,遍歷每個數(shù)的時候都更新這個變量。而最大子序列和的算法和上個解法還是一樣的。
代碼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 = sum < 0 ? nums[i] : sum + nums[i]; max = Math.max(sum, max); } return max; } }
文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請注明本文地址:http://specialneedsforspecialkids.com/yun/66167.html
摘要:我們可以分別得出這三種情況下的最大子數(shù)列和,并比較得出最大的那個。我們只需要考慮左子列的最大和以及跨越了左右的中子列的最大值。 題目要求 Find the contiguous subarray within an array (containing at least one number) which has the largest sum. For example, given ...
摘要:題目要求從一個整數(shù)數(shù)組中找到一個子數(shù)組,該子數(shù)組中的所有元素的乘積最大。比如數(shù)組的最大乘積子數(shù)組為思路與代碼這題目考察了動態(tài)編程的思想。至于為什么還要比較,是因為如果是一個負數(shù)的,那么之前的最小乘積在這里可能就成為了最大的乘積了。 題目要求 Find the contiguous subarray within an array (containing at least one num...
摘要:如果單開元素加和更大判斷前面的子數(shù)組和是不是小于。此元素就成為了子數(shù)組的第一個元素。每次操作都要判斷,當前是否是最大值,更新值。 題目詳情 Find the contiguous subarray within an array (containing at least one number) which has the largest sum.For example, given t...
摘要:題目詳情輸入一個數(shù)組和一個整數(shù)。要求找出輸入數(shù)組中長度為的子數(shù)組,并且要求子數(shù)組元素的加和平均值最大。 題目詳情 Given an array consisting of n integers, find the contiguous subarray of given length k that has the maximum average value. And you need ...
摘要:這是一道簡單的動規(guī)題目,同步更新數(shù)組解決了為負數(shù)的問題。即使是求最小乘積子序列,也可以通過取和的最小值獲得。 Problem Find the contiguous subarray within an array (containing at least one number) which has the largest product. Example For example, g...
閱讀 1079·2021-11-16 11:44
閱讀 1368·2019-08-30 13:12
閱讀 2401·2019-08-29 16:05
閱讀 3070·2019-08-28 18:29
閱讀 904·2019-08-26 13:41
閱讀 3228·2019-08-26 13:34
閱讀 2596·2019-08-26 10:35
閱讀 931·2019-08-26 10:28