日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

53.Maximum Subarray

發(fā)布時間:2023/12/10 编程问答 29 豆豆
生活随笔 收集整理的這篇文章主要介紹了 53.Maximum Subarray 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.
/** 53.Maximum Subarray * 2016-5-7 by Mingyang * 如果我們從頭遍歷這個數(shù)組。對于數(shù)組中的其中一個元素,它只有兩個選擇: 1.* 要么加入之前的數(shù)組加和之中(跟別人一組) * 2. 要么自己單立一個數(shù)組(自己單開一組)* 所以對于這個元素應(yīng)該如何選擇,就看他能對哪個組的貢獻(xiàn)大。如果跟別人一組* 能讓總加和變大,還是跟別人一組好了;如果自己起個頭一組,自己的值比之前加和的值還要大,那么還是自己單開一組好了。* 所以利用一個dp數(shù)組,記錄每一輪sum的最大值,dp[i]表示當(dāng)前這個元素是跟之前數(shù)組加和一組還是自己單立一組好,然后維護(hù)一個全局最大值即位答案* 那么這道題目開始想能不能用maxSubArray(int A[], int i, int j), which means the maxSubArray for A[i: j].* 但是這么寫子函數(shù)就很難找到這種關(guān)系。那么我們接下來就怎么做呢?* maxSubArray(int A[], int i), which means the maxSubArray for A[0:i ] which must has A[i] as the end element.* 那么就下來的關(guān)系就是:* dp[i] = Math.max(A[i], dp[i - 1] + A[i]);* 也就是說對于A[i]到底加不加進(jìn)來,我們只需要看這個加進(jìn)來大還是單獨大。* 因為你如果加進(jìn)來都比單獨大,那么后面還是一個增量。* 千萬不要寫成:dp[i] = Math.max(dp[i-1], dp[i - 1] + A[i]);
* Kadan's algorithm O(n) time and O(1) space
*/public static int maxSubArray(int[] A) {int[] dp = new int[A.length];int max = A[0];dp[0] = A[0];for (int i = 1; i < A.length; i++) {dp[i] = Math.max(A[i], dp[i - 1] + A[i]);
// 這里只比較了自己另外開一個,和原來的加一起開的區(qū)別max = Math.max(max, dp[i]);}
//不是每一個dp都是返回最后一個dp值哦!有可能返回全局變量
return max;}/** 下面是我自己的解法,開始想的有點復(fù)雜,然后后面仔細(xì)列舉一下也是蠻簡單的,這里用了一個dp數(shù)組* dp[i]表示包括i在內(nèi)的連續(xù)數(shù)組的最大值,而不是到i最優(yōu)的結(jié)果* [-1,-2]那么dp[1]=-3,因為要把-2包括進(jìn)來* 那么如果每個數(shù)自己就很大,比加起前面累積的dp還大,那么久自成一家* 否則的話需要加起來,每次更新dp的時候與全局變量max比較一下*/public int maxSubArray1(int[] nums) {int len=nums.length;int max=nums[0];int[] dp=new int[len];dp[0]=nums[0];for(int i=1;i<len;i++){if(nums[i]>nums[i]+dp[i-1]){dp[i]=nums[i];max=Math.max(max,dp[i]);}else{dp[i]=dp[i-1]+nums[i];max=Math.max(max,dp[i]);}}return max;}

?

轉(zhuǎn)載于:https://www.cnblogs.com/zmyvszk/p/5469683.html

總結(jié)

以上是生活随笔為你收集整理的53.Maximum Subarray的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。