拙劣算法:求子數(shù)組的最大和

題目:輸入一個(gè)整形數(shù)組,數(shù)組里有正數(shù)也有負(fù)數(shù)远荠。數(shù)組中連續(xù)的一個(gè)或多個(gè)整數(shù)組成一個(gè)子數(shù)組矮固,每個(gè)子數(shù)組都有一個(gè)和。求所有子數(shù)組的和的最大值譬淳。要求時(shí)間復(fù)雜度為O(n)档址。
例如輸入的數(shù)組為1, -2, 3, 10, -4, 7, 2, -5,和最大的子數(shù)組為3, 10, -4, 7, 2邻梆,因此輸出為該子數(shù)組的和18守伸。
因?yàn)槭荗(N)的復(fù)雜度,因此需采用的DP的思想浦妄,記錄下當(dāng)前元素之和(為其最優(yōu)狀態(tài)含友,既最大)替裆,將其與目前所得的最大和比較,若大于則更新窘问,否則繼續(xù)辆童。狀態(tài)的累加遵循這個(gè)過程:如果當(dāng)前和小于0,則放棄該狀態(tài)惠赫,將其歸零把鉴。

我的拙劣想法:
1.遇到負(fù)數(shù)是首先保存一些當(dāng)前的和值sum到局部變量result。
2.如果加上負(fù)數(shù)之后sum值小于0儿咱。則從后面一個(gè)重新開始算庭砍。找第一個(gè)正數(shù)開始重新求和。
第一份拙劣代碼混埠,無參考純自己寫怠缸。

        int[] arr={4,0,-3,10,-4,7,-2,5};
        int sum=0;
        int result=-100;        //定義結(jié)果最小值
        for(int i=0;i<arr.length;i++){
            if(arr[i]>0){                    //數(shù)值大于0,sum值增加
                sum=sum+arr[i];
            }else {                         //數(shù)值小于0
                if(sum>result){              //更新result
                    result=sum;
                }
                if(sum+arr[i]>0){            //查看加上負(fù)數(shù)后是否小于0
                   sum=sum+arr[i];        //不小于0钳宪,繼續(xù)往后加
                }else {                          //小于0揭北,把sum值重置0
                   sum=0;
                }
            }
        }
        
        if(sum>result){                      //最后一次可能sum大于result
            result=sum;
        }
        
        System.out.println("result="+result+" sum="+sum );

上面的算法可以優(yōu)化下,把sum+arr[i]<0的情況sum=0那里改一下吏颖,這里應(yīng)該改成尋找下一個(gè)正數(shù)才對(duì)搔体。這樣每個(gè)負(fù)數(shù)就不用進(jìn)行兩次對(duì)比,進(jìn)行一次小于0的對(duì)比就可以了半醉。

        int[] arr={1, -2, 3, 10, -4, 7, 2, -5};
        int sum=0;
        int result=arr[0];
        for(int i=1;i<arr.length;i++){
            if(arr[i]>=0){
                sum=sum+arr[i];
            }else {
                if(sum>result){
                    result=sum;
                }
                
                if(sum+arr[i] < 0){
                   while(i<arr.length && arr[i]<0){
                       i++;
                   }
                   sum=arr[i];        //尋找下一個(gè)正數(shù)疚俱,重新開始計(jì)算
                }else {
                    sum=sum+arr[i];
                }
                   
            }
               
        }
        if(sum>result){
            result=sum;
        }
        System.out.println("result="+result);

但上面的程序在輸入全是負(fù)數(shù)的時(shí)候跑不通。下面的程序可以

        int[] arr={-9, -2, -3, 10, 5, -1,-2, 5};
        int sum=arr[0];
        int result=arr[0];
        for(int i=1;i<arr.length;i++){
            if(arr[i]>=0){
                if(sum<0){
                    sum=arr[i];   //把sum重置為正數(shù)
                }else {
                    sum=sum+arr[i];
                }
            }else {
                if(sum>result){
                    result=sum;
                }
                
                if(sum+arr[i] < 0){
                   sum=arr[i];             //和為負(fù)數(shù)時(shí)缩多,從該負(fù)數(shù)開始算
                }else {
                   sum=sum+arr[i];
                }
                   
            }
               
        }
        if(sum>result){
            result=sum;
        }
        System.out.println("result="+result);

全為負(fù)數(shù)時(shí)呆奕,sum值都為單獨(dú)一個(gè)負(fù)數(shù)。跟result比較衬吆,可以更新result登馒。

關(guān)鍵思想是在遇到和為負(fù)數(shù)的時(shí)候,從這個(gè)負(fù)數(shù)開始算咆槽。但是遇到下一個(gè)數(shù)是正數(shù)的時(shí)候,把sum重置為這個(gè)正數(shù)圈纺。

上面的代碼純屬自己寫秦忿,標(biāo)準(zhǔn)答案還是看網(wǎng)上吧!蛾娶!

http://www.cnblogs.com/aLittleBitCool/archive/2011/01/16/1936842.html
發(fā)現(xiàn)網(wǎng)上的標(biāo)準(zhǔn)答案還是簡單多了灯谣。。蛔琅。庸俗

直接加胎许,邊加邊更新最大值。小于0,就直接重新加9家ぁ9呈觥!穆碎!簡單的要命

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末牙勘,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子所禀,更是在濱河造成了極大的恐慌方面,老刑警劉巖,帶你破解...
    沈念sama閱讀 222,183評(píng)論 6 516
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件色徘,死亡現(xiàn)場離奇詭異恭金,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī)褂策,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 94,850評(píng)論 3 399
  • 文/潘曉璐 我一進(jìn)店門横腿,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人辙培,你說我怎么就攤上這事蔑水。” “怎么了扬蕊?”我有些...
    開封第一講書人閱讀 168,766評(píng)論 0 361
  • 文/不壞的土叔 我叫張陵搀别,是天一觀的道長。 經(jīng)常有香客問我尾抑,道長歇父,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 59,854評(píng)論 1 299
  • 正文 為了忘掉前任再愈,我火速辦了婚禮榜苫,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘翎冲。我一直安慰自己垂睬,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 68,871評(píng)論 6 398
  • 文/花漫 我一把揭開白布抗悍。 她就那樣靜靜地躺著驹饺,像睡著了一般。 火紅的嫁衣襯著肌膚如雪缴渊。 梳的紋絲不亂的頭發(fā)上赏壹,一...
    開封第一講書人閱讀 52,457評(píng)論 1 311
  • 那天,我揣著相機(jī)與錄音衔沼,去河邊找鬼蝌借。 笑死昔瞧,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的菩佑。 我是一名探鬼主播自晰,決...
    沈念sama閱讀 40,999評(píng)論 3 422
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼擎鸠!你這毒婦竟也來了缀磕?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 39,914評(píng)論 0 277
  • 序言:老撾萬榮一對(duì)情侶失蹤劣光,失蹤者是張志新(化名)和其女友劉穎袜蚕,沒想到半個(gè)月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體绢涡,經(jīng)...
    沈念sama閱讀 46,465評(píng)論 1 319
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡牲剃,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 38,543評(píng)論 3 342
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了雄可。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片凿傅。...
    茶點(diǎn)故事閱讀 40,675評(píng)論 1 353
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖数苫,靈堂內(nèi)的尸體忽然破棺而出聪舒,到底是詐尸還是另有隱情,我是刑警寧澤虐急,帶...
    沈念sama閱讀 36,354評(píng)論 5 351
  • 正文 年R本政府宣布箱残,位于F島的核電站,受9級(jí)特大地震影響止吁,放射性物質(zhì)發(fā)生泄漏被辑。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 42,029評(píng)論 3 335
  • 文/蒙蒙 一敬惦、第九天 我趴在偏房一處隱蔽的房頂上張望盼理。 院中可真熱鬧,春花似錦俄删、人聲如沸宏怔。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,514評(píng)論 0 25
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽臊诊。三九已至,卻和暖如春迅矛,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背潜叛。 一陣腳步聲響...
    開封第一講書人閱讀 33,616評(píng)論 1 274
  • 我被黑心中介騙來泰國打工秽褒, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留壶硅,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 49,091評(píng)論 3 378
  • 正文 我出身青樓销斟,卻偏偏與公主長得像庐椒,于是被迫代替她去往敵國和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子蚂踊,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,685評(píng)論 2 360

推薦閱讀更多精彩內(nèi)容

  • 背景 一年多以前我在知乎上答了有關(guān)LeetCode的問題, 分享了一些自己做題目的經(jīng)驗(yàn)约谈。 張土汪:刷leetcod...
    土汪閱讀 12,748評(píng)論 0 33
  • 第5章 引用類型(返回首頁) 本章內(nèi)容 使用對(duì)象 創(chuàng)建并操作數(shù)組 理解基本的JavaScript類型 使用基本類型...
    大學(xué)一百閱讀 3,238評(píng)論 0 4
  • Javascript有很多數(shù)組的方法,有的人有W3C的API犁钟,還可以去MDN上去找棱诱,但是我覺得API上說的不全,M...
    頑皮的雪狐七七閱讀 4,095評(píng)論 0 6
  • 想起昨晚“教訓(xùn)”久久的場景,自責(zé)得想扇自己兩耳光醋粟。 都說慈母多敗兒靡菇,雖然我也算不上心慈手軟的媽媽,但我也不支持河?xùn)|...
    久兒久知閱讀 517評(píng)論 0 3
  • 黑夜從大地上升起 遮住了光明的天空 秋后留有麥梗的大地 黑夜從外部升起 我從遠(yuǎn)方來 遙遠(yuǎn)的路程 來到這里 受過傷的...
    汪寵喵匠閱讀 265評(píng)論 2 16