<output id="qn6qe"></output>

    1. <output id="qn6qe"><tt id="qn6qe"></tt></output>
    2. <strike id="qn6qe"></strike>

      亚洲 日本 欧洲 欧美 视频,日韩中文字幕有码av,一本一道av中文字幕无码,国产线播放免费人成视频播放,人妻少妇偷人无码视频,日夜啪啪一区二区三区,国产尤物精品自在拍视频首页,久热这里只有精品12

      動態規劃或線段樹:最大子序和(leetcode)

      給定一個整數數組 nums ,找到一個具有最大和的連續子數組(子數組最少包含一個元素),返回其最大和。

      示例:

      輸入: [-2,1,-3,4,-1,2,1,-5,4],

      輸出: 6
      解釋: 連續子數組 [4,-1,2,1] 的和最大,為 6。

      方法一:動態規劃

       

       代碼:

       1 class Solution {
       2 public:
       3     int maxSubArray(vector<int>& nums) {
       4         int m=nums[0],cur=nums[0];
       5         for(int i=1;i<nums.size();++i){
       6             cur=cur<0?nums[i]:cur+nums[i];
       7             m=max(m,cur);
       8         }
       9         return m;
      10     }
      11 };

      方法二:線段樹

       

       代碼:

       1 class Solution {
       2 public:
       3     /**
       4     *線段樹:分治,將一段序列分成左右兩段來求解。
       5     *lSum 表示 [l, r] 內以 l 為左端點的最大子段和。lSum=max(左段.lSum,左段.iSum+右段.lSum)
       6     *rSum 表示 [l, r] 內以 r 為右端點的最大子段和。rSum=max(右段.rSum,右段.iSum+左段.rSum)
       7     *iSum 表示 [l, r] 的區間和。iSum=左段.iSum+右段.iSum
       8     *mSum 表示 [l, r] 內的最大子段和。分三種情況,最大子序在左段中,在右段中,跨段。mSum=max(l.mSum,r.mSum,l.rSum+r.lSum)
       9     */
      10     /*與動態規劃相比,時間復雜度相同,但是因為使用了遞歸,并且維護了四個信息的結構體,運行的時間略長,空間復雜度也不如動態規劃優秀,
      11    而且難以理解。那么這種方法存在的意義是什么呢?對于這道題而言,確實是如此的。但是仔細觀察分治法,它不僅可以解決區間 [0, n-1],還可以用于
      12    解決任意的子區間 [l,r] 的問題。如果我們把 [0,n?1] 分治下去出現的所有子區間的信息都用堆式存儲的方式記憶化下來,即建成一顆真正的樹之后,
      13    我們就可以在O(logn) 的時間內求到任意區間內的答案,我們甚至可以修改序列中的值,做一些簡單的維護,之后仍然可以在O(logn) 的時間內求到任意
      14    區間內的答案,對于大規模查詢的情況下,這種方法的優勢便體現了出來。這棵樹就是神奇的數據結構——線段樹。
      */ 15 struct Status{ 16 int lSum,rSum,iSum,mSum; 17 }; 18 Status pushUp(Status l,Status r){ 19 int lSum=max(l.lSum,l.iSum+r.lSum); 20 int rSum=max(r.rSum,r.iSum+l.rSum); 21 int iSum=l.iSum+r.iSum; 22 int mSum=max(max(l.mSum,r.mSum),l.rSum+r.lSum); 23 return (Status){lSum,rSum,iSum,mSum}; 24 } 25 Status get(vector<int>& nums,int l,int r){ 26 if(l==r) 27 return Status{nums[l],nums[l],nums[l],nums[l]}; 28 int m=(l+r)>>1; 29 return pushUp(get(nums,l,m),get(nums,m+1,r)); 30 } 31 int maxSubArray(vector<int>& nums) { 32 return get(nums,0,nums.size()-1).mSum; 33 } 34 };

       

      posted @ 2020-05-23 00:01  謝哥在彼方  閱讀(351)  評論(0)    收藏  舉報
      主站蜘蛛池模板: 专干老肥熟女视频网站| 国产三级国产精品久久成人| 在线观看人成视频免费| 亚洲一区二区三区激情视频| 骚虎视频在线观看| 久久精品国产亚洲av麻| 国产午夜精品福利91| 亚洲免费观看在线视频| 毛片在线播放网址| 欧美裸体xxxx极品| 日韩精品亚洲精品第一页| 91精品国产福利尤物免费| 国产午夜成人久久无码一区二区| 国产精品久久久久久福利69堂| 成人做爰www网站视频| 激情自拍校园春色中文| 久久―日本道色综合久久| 精品无码国产自产拍在线观看蜜| 久久久久久久久毛片精品| 国产办公室秘书无码精品99| 湘潭市| 久久精品午夜视频| 在线观看中文字幕国产码| 欧美性猛交xxxx黑人| 国产内射xxxxx在线| 亚洲免费成人av一区| 中文字幕永久精品国产| 国产精品福利自产拍久久 | 在线观看视频一区二区三区| 日韩三级一区二区在线看| 人妻少妇偷人精品一区| 国产一区二区不卡在线| 久久夜色精品国产亚洲av| 国产精品女同一区三区五区| 少妇做爰免费视看片| 亚洲熟妇久久精品| 蜜桃视频网站| 欧美老熟妇又粗又大| 色猫咪av在线观看| 中美日韩在线一区黄色大片| 一本久道久久综合久久鬼色|