国产精品久久久aaaa,日日干夜夜操天天插,亚洲乱熟女香蕉一区二区三区少妇,99精品国产高清一区二区三区,国产成人精品一区二区色戒,久久久国产精品成人免费,亚洲精品毛片久久久久,99久久婷婷国产综合精品电影,国产一区二区三区任你鲁

0
  • 聊天消息
  • 系統(tǒng)消息
  • 評論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

最大子序和,貪心解法

算法與數(shù)據(jù)結(jié)構(gòu) ? 來源:代碼隨想錄 ? 作者:代碼隨想錄 ? 2022-05-10 10:37 ? 次閱讀
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

53. 最大子序和

力扣題目鏈接:https://leetcode-cn.com/problems/maximum-subarray

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

示例: 輸入: [-2,1,-3,4,-1,2,1,-5,4] 輸出: 6 解釋:連續(xù)子數(shù)組[4,-1,2,1] 的和最大,為 6。

暴力解法

暴力解法的思路,第一層for 就是設(shè)置起始位置,第二層for循環(huán)遍歷數(shù)組尋找最大值

時間復(fù)雜度:O(n^2) 空間復(fù)雜度:O(1)

classSolution{
public:
intmaxSubArray(vector<int>&nums){
intresult=INT32_MIN;
intcount=0;
for(inti=0;i//設(shè)置起始位置
count=0;
for(intj=i;j//每次從起始位置i開始遍歷尋找最大值
count+=nums[j];
result=count>result?count:result;
}
}
returnresult;
}
};

以上暴力的解法C++勉強(qiáng)可以過,其他語言就不確定了。

貪心解法

貪心貪的是哪里呢?

如果 -2 1 在一起,計算起點的時候,一定是從1開始計算,因為負(fù)數(shù)只會拉低總和,這就是貪心貪的地方!

局部最優(yōu):當(dāng)前“連續(xù)和”為負(fù)數(shù)的時候立刻放棄,從下一個元素重新計算“連續(xù)和”,因為負(fù)數(shù)加上下一個元素 “連續(xù)和”只會越來越小。

全局最優(yōu):選取最大“連續(xù)和”

局部最優(yōu)的情況下,并記錄最大的“連續(xù)和”,可以推出全局最優(yōu)

從代碼角度上來講:遍歷nums,從頭開始用count累積,如果count一旦加上nums[i]變?yōu)樨?fù)數(shù),那么就應(yīng)該從nums[i+1]開始從0累積count了,因為已經(jīng)變?yōu)樨?fù)數(shù)的count,只會拖累總和。

這相當(dāng)于是暴力解法中的不斷調(diào)整最大子序和區(qū)間的起始位置

那有同學(xué)問了,區(qū)間終止位置不用調(diào)整么?如何才能得到最大“連續(xù)和”呢?

區(qū)間的終止位置,其實就是如果count取到最大值了,及時記錄下來了。例如如下代碼:

if(count>result)result=count;

這樣相當(dāng)于是用result記錄最大子序和區(qū)間和(變相的算是調(diào)整了終止位置)

如動畫所示:

88d26216-d009-11ec-bce3-dac502259ad0.gif53.最大子序和

紅色的起始位置就是貪心每次取count為正數(shù)的時候,開始一個區(qū)間的統(tǒng)計。

那么不難寫出如下C++代碼(關(guān)鍵地方已經(jīng)注釋)

classSolution{
public:
intmaxSubArray(vector<int>&nums){
intresult=INT32_MIN;
intcount=0;
for(inti=0;iif(count>result){//取區(qū)間累計的最大值(相當(dāng)于不斷確定最大子序終止位置)
result=count;
}
if(count<=?0)count=0;//相當(dāng)于重置最大子序起始位置,因為遇到負(fù)數(shù)一定是拉低總和
}
returnresult;
}
};

時間復(fù)雜度:O(n) 空間復(fù)雜度:O(1)

當(dāng)然題目沒有說如果數(shù)組為空,應(yīng)該返回什么,所以數(shù)組為空的話返回啥都可以了。

不少同學(xué)認(rèn)為 如果輸入用例都是-1,或者 都是負(fù)數(shù),這個貪心算法跑出來的結(jié)果是0, 這是又一次證明腦洞模擬不靠譜的經(jīng)典案例,建議大家把代碼運行一下試一試,就知道了,也會理解 為什么 result 要初始化為最小負(fù)數(shù)了。

動態(tài)規(guī)劃

當(dāng)然本題還可以用動態(tài)規(guī)劃來做,當(dāng)前「代碼隨想錄」主要講解貪心系列,后續(xù)到動態(tài)規(guī)劃系列的時候會詳細(xì)講解本題的dp方法。

那么先給出我的dp代碼如下,有時間的錄友可以提前做一做:

classSolution{
public:
intmaxSubArray(vector<int>&nums){
if(nums.size()==0)return0;
vector<int>dp(nums.size(),0);//dp[i]表示包括i之前的最大連續(xù)子序列和
dp[0]=nums[0];
intresult=dp[0];
for(inti=1;i1]+nums[i],nums[i]);//狀態(tài)轉(zhuǎn)移公式
if(dp[i]>result)result=dp[i];//result保存dp[i]的最大值
}
returnresult;
}
};

時間復(fù)雜度:O(n) 空間復(fù)雜度:O(n)

總結(jié)

本題的貪心思路其實并不好想,這也進(jìn)一步驗證了,別看貪心理論很直白,有時候看似是常識,但貪心的題目一點都不簡單!

后續(xù)將介紹的貪心題目都挺難的,哈哈,所以貪心很有意思,別小看貪心!

其他語言版本

Java

classSolution{
publicintmaxSubArray(int[]nums){
if(nums.length==1){
returnnums[0];
}
intsum=Integer.MIN_VALUE;
intcount=0;
for(inti=0;i//取區(qū)間累計的最大值(相當(dāng)于不斷確定最大子序終止位置)
if(count<=?0){
count=0;//相當(dāng)于重置最大子序起始位置,因為遇到負(fù)數(shù)一定是拉低總和
}
}
returnsum;
}
}
//DP方法
classSolution{
publicintmaxSubArray(int[]nums){
intans=Integer.MIN_VALUE;
int[]dp=newint[nums.length];
dp[0]=nums[0];
ans=dp[0];

for(inti=1;i1]+nums[i],nums[i]);
ans=Math.max(dp[i],ans);
}

returnans;
}
}

Python

classSolution:
defmaxSubArray(self,nums:List[int])->int:
result=-float('inf')
count=0
foriinrange(len(nums)):
count+=nums[i]
ifcount>result:
result=count
ifcount<=?0:
count=0
returnresult

Go

funcmaxSubArray(nums[]int)int{
maxSum:=nums[0]
fori:=1;ilen(nums);i++{
ifnums[i]+nums[i-1]>nums[i]{
nums[i]+=nums[i-1]
}
ifnums[i]>maxSum{
maxSum=nums[i]
}
}
returnmaxSum
}

--- EOF ---

審核編輯 :李倩


聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問題,請聯(lián)系本站處理。 舉報投訴
  • DP
    DP
    +關(guān)注

    關(guān)注

    1

    文章

    241

    瀏覽量

    42251
  • 數(shù)組
    +關(guān)注

    關(guān)注

    1

    文章

    420

    瀏覽量

    27362

原文標(biāo)題:最大子序和,又貪心又DP

文章出處:【微信號:TheAlgorithm,微信公眾號:算法與數(shù)據(jù)結(jié)構(gòu)】歡迎添加關(guān)注!文章轉(zhuǎn)載請注明出處。

收藏 人收藏
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

    評論

    相關(guān)推薦
    熱點推薦

    深入剖析ADM1065超級定器與監(jiān)測器:復(fù)雜電源管理的理想選擇

    深入剖析ADM1065超級定器與監(jiān)測器:復(fù)雜電源管理的理想選擇 在多電源系統(tǒng)的設(shè)計領(lǐng)域中,電源的監(jiān)控與定至關(guān)重要。Analog Devices推出的ADM1065超級定器,為電源管理提供了卓越
    的頭像 發(fā)表于 02-28 13:45 ?83次閱讀

    探索MAX16895 - MAX16899:超小型高精度可調(diào)/監(jiān)控電路的卓越性能

    探索MAX16895 - MAX16899:超小型高精度可調(diào)/監(jiān)控電路的卓越性能 在電子設(shè)計領(lǐng)域,對于電源管理和系統(tǒng)監(jiān)控的需求日益增長。Analog Devices推出的MAX16895
    的頭像 發(fā)表于 02-28 11:35 ?217次閱讀

    ADM1266:可級聯(lián)超級定器的全面解析

    ADM1266:可級聯(lián)超級定器的全面解析 在電子設(shè)計領(lǐng)域,電源管理和監(jiān)控是至關(guān)重要的環(huán)節(jié)。ADM1266作為一款可級聯(lián)的超級定器,為電源管理提供了強(qiáng)大而靈活的解決方案。本文將深入剖析
    的頭像 發(fā)表于 02-28 11:10 ?130次閱讀

    光伏電站功率因數(shù)總不達(dá)標(biāo)?找找電表逆相和三相問題

    光伏電站功率因數(shù)受三相不平衡和電表相影響,易控寶四象限控制器可有效解決無功補(bǔ)償與計量偏差問題。
    的頭像 發(fā)表于 02-09 11:22 ?207次閱讀
    光伏電站功率因數(shù)總不達(dá)標(biāo)?找找電表逆相<b class='flag-5'>序</b>和三相問題

    EN18031 認(rèn)證全解析:三大子標(biāo)準(zhǔn)搞定歐盟網(wǎng)絡(luò)安全合規(guī)

    2026年歐盟網(wǎng)絡(luò)安全監(jiān)管持續(xù)收緊,EN18031作為RED指令強(qiáng)制網(wǎng)絡(luò)安全標(biāo)準(zhǔn),已成為無線設(shè)備出海歐盟的核心門檻。該認(rèn)證由三大子標(biāo)準(zhǔn)構(gòu)成,分別對應(yīng)不同安全場景,精準(zhǔn)匹配即可高效完成合規(guī)。本文全面
    的頭像 發(fā)表于 02-06 15:41 ?1895次閱讀
    EN18031 認(rèn)證全解析:三<b class='flag-5'>大子</b>標(biāo)準(zhǔn)搞定歐盟網(wǎng)絡(luò)安全合規(guī)

    飛凌嵌入式ElfBoard-系統(tǒng)信息與資源之獲取系統(tǒng)運行時配置參數(shù)

    : 這個參數(shù)是一個整數(shù)常量,用于指定所需的系統(tǒng)配置參數(shù)。可以使用以下一些常量: _SC_ARG_MAX:命令行參數(shù)的最大字節(jié)數(shù)。 _SC_CHILD_MAX:一個進(jìn)程可以創(chuàng)建的最大子進(jìn)程數(shù)
    發(fā)表于 01-14 08:50

    電流互感器在電阻柜中的應(yīng)用

    ? ? 在中性點經(jīng)電阻接地的系統(tǒng)中(NS-BZ變壓器中性點接地電阻柜、NS-FZ發(fā)電機(jī)電阻柜等),零電流互感器主要用來檢測單相接地故障產(chǎn)生的零電流,給繼電保護(hù)裝置提供信號,從而實現(xiàn)接地故障的靈敏
    的頭像 發(fā)表于 01-07 10:16 ?190次閱讀
    零<b class='flag-5'>序</b>電流互感器在電阻柜中的應(yīng)用

    三相異步電動機(jī)星三角切換相問題

    三相異步電動機(jī)的星三角切換是工業(yè)控制中常見的降壓啟動方式,其核心目的是通過改變繞組接法來降低啟動電流。然而,在實際操作中,相問題往往成為影響切換成功與否的關(guān)鍵因素。若處理不當(dāng),輕則導(dǎo)致電機(jī)反轉(zhuǎn)或
    的頭像 發(fā)表于 12-10 07:44 ?935次閱讀

    電能質(zhì)量在線監(jiān)測裝置的相錯誤記錄功能可以保存多久?

    電能質(zhì)量在線監(jiān)測裝置的相錯誤記錄保存時間, 受設(shè)備類型、存儲配置、行業(yè)標(biāo)準(zhǔn)及應(yīng)用場景影響,從數(shù)天到數(shù)年不等 ,具體如下: 一、相錯誤記錄的存儲特性 相錯誤作為電能質(zhì)量異常事件的一種,通常
    的頭像 發(fā)表于 12-05 17:32 ?2102次閱讀
    電能質(zhì)量在線監(jiān)測裝置的相<b class='flag-5'>序</b>錯誤記錄功能可以保存多久?

    上新 | 有限空間“新解法”!凌科LP20系列90°工業(yè)級連接器新品上市

    LP20系列90°連接器新品緊湊布線有了新選擇,90°結(jié)構(gòu)讓空間局限有了“新解法”。凌科LP20系列90°工業(yè)級連接器全新上線,為有限空間布線和轉(zhuǎn)角布線帶來全新連接解決方案。LP20系列90°連接器
    的頭像 發(fā)表于 11-04 18:12 ?484次閱讀
    上新 | 有限空間“新<b class='flag-5'>解法</b>”!凌科LP20系列90°工業(yè)級連接器新品上市

    禎達(dá)生物利用NVIDIA Parabricks技術(shù)加速多組學(xué)分析

    禎達(dá)生物是中國領(lǐng)先的多組學(xué)和測序服務(wù)提供商之一,該公司利用 NVIDIA Parabricks 來加速多組學(xué)分析。借助 Parabricks,禎達(dá)生物將全基因組測序的時間從 7 小時縮短至 31
    的頭像 發(fā)表于 09-29 16:05 ?971次閱讀

    LM3881系列 3軌簡單功率定器技術(shù)手冊

    LM3881 簡單電源定器提供了控制上電和電源的最簡單方法 多個電源(開關(guān)或線性穩(wěn)壓器)的關(guān)閉。通過錯開啟動 序列,可以避免可能影響 系統(tǒng)的可靠性。
    的頭像 發(fā)表于 08-19 13:49 ?984次閱讀
    LM3881系列 3軌簡單功率定<b class='flag-5'>序</b>器技術(shù)手冊

    UCD9090-Q1 汽車10通道定器和系統(tǒng)健康監(jiān)測器技術(shù)手冊

    UCD9090-Q1 是一款 10 軌 PMBus 和 I^2^C 可尋址電源定器和監(jiān)視器。該器件集成了一個 12 位 ADC,用于監(jiān)控多達(dá) 10 個電源電壓輸入。23 個 GPIO 引腳可用
    的頭像 發(fā)表于 08-19 09:46 ?805次閱讀
    UCD9090-Q1 汽車10通道定<b class='flag-5'>序</b>器和系統(tǒng)健康監(jiān)測器技術(shù)手冊

    福祿克電機(jī)和相旋轉(zhuǎn)指示儀的使用方法

    三相電由于自身特性,三根火線之間存在相。通常情況下,三相線路在安裝時,需要確保其相正確。若相不正常,可能會導(dǎo)致設(shè)備工作效率下降,電機(jī)運轉(zhuǎn)異常,嚴(yán)重時可能損壞用電設(shè)備。
    的頭像 發(fā)表于 07-07 15:51 ?1092次閱讀

    諧波驅(qū)動六相PMSM雙電機(jī)串聯(lián)系統(tǒng)研究

    摘要:研究了一種基于零諧波驅(qū)動的雙Y移30°永磁同步電動機(jī)(PMSM)雙電機(jī)串聯(lián)系統(tǒng),分析了零諧波驅(qū)動串聯(lián)系統(tǒng)的工作原理,建立了兩臺PMSM定子繞組串聯(lián)聯(lián)結(jié)的相轉(zhuǎn)換關(guān)系,給出了串聯(lián)系統(tǒng)的獨立解
    發(fā)表于 06-09 16:27