算法初步|貪心算法

概念:

局部最優(yōu)

題目

  • 1. 分發(fā)餅干 (easy 455)

思路:
image.png

給最小孩子以能滿足的最小餅干

代碼:

方法一:
時(shí)間復(fù)雜度為O(n^2);

using namespace std;
int MaxChildren(vector<int>&children,vector<int>&cookies){
    int ans=0;
    sort(children.begin(),children.end());
    sort(cookies.begin(),cookies.end());
    for(int i=0;i<children.size();i++){
        for(int j=0;j<cookies.size();j++){
            if(children[i]<=cookies[j]){
                ans++;
                cookies[j]-=children[i]:
            }
        }
    }
    return ans;
}

方法二:
時(shí)間復(fù)雜度

using namespace std;

int MaxChildren(vector<int>&children,vector<int>&cookies){
    int ans=0;
    makeheap(children.begin(),children.end(),greater<int>);
    makeheap(cookies.begin(),cookies.end(),greater<int>);
    for(int i=0;i<children.size();i++){
        for(int j=0;j<cookies.size();j++){
            pop_heap(children.begin(),children.end(),greater<int>);
            pop_heap(cookies.begin(),cookies.end(),greater<int>);  
            if(children[-1]<=cookies[-1]){
                ans++;
                cookies[-1]-=children[-1];
                children.pop_back();
                cookies.pop_back(); 
                //若餅干可以吃剩下的
                //if(cookies[-1]==0) { cookies.pop_back(); }
            }
            else{ cookies.pop_back();  }
        }
    }
    return ans;
  • 2.股票的最大收益

思路:

f[4]-f[1]=(f[4]-f[3])+(f[3]-f[2])+(f[2]-f[1])
即局部最優(yōu)可以保證全局最優(yōu)庸诱,因此可以使用貪心捻浦。


from 知乎

代碼:

int MaxInterest(vector<int>& prices){
  int ans=0;
  for(int i=1;i<prices.size();i++){
    if(prices[i]>prices[i-1]){ans+=prices[i]-prices[i-1];}  
  }
  return ans;
}
  • 種植問(wèn)題:

代碼:

bool canPlant(vector<int>& plant,int n){
  if(n<=0)return true;
  int i=0;
  if(plant[plant.size()-1]==0&&plant[plant.size()-2]==0){n--;plant[plant.size()-1]=1;}
  while(i<plant.size()){
    if(plant[i-1]=0&&plant[i+1]=0)n--;
    if(n==0)return true;
    i++;
    }
  return false;
  • Kruskal和Prim算法

Kurskal算法思想:對(duì)邊排序,每次取最小邊桥爽,若不構(gòu)成環(huán)路則加入朱灿,所有點(diǎn)入集合時(shí)循環(huán)終止
偽代碼:

void Krukskal(Grap& map,vector<string>&Kvertex){
  sort(map);
  int i=0,j=0;
  vector<vector<int>>&Tvertex;
  while(i<num){
    if(Tvertex[map[j][0]][map[j][1]]==0){
      Kvertex[++i]=to_string([map[j][0]])+(string)[map[j][1]];
      Tvertex[map[j][0]][map[j][1]]==1;
    }
    j++;
  }
}

Prim算法思想:取點(diǎn)的最小邊钠四,更新點(diǎn)集合盗扒,每次取集合的最小鄰邊,所有點(diǎn)入集合時(shí)循環(huán)終止
代碼:

 vector<int> Prim(Grap &G){
    int count=1,v=0;
    vector<int>(num,0)w;
    while(count<G.num){
        v=Sort(w,G,count);//Sort,在G種形导,取w的前count個(gè)元素的臨邊环疼,找到最小值,返回最小值的臨邊朵耕;
        w[count++]=v;
    }
    return w;
  • Dijikstra算法

思想:取點(diǎn)的最小邊炫隶,更新點(diǎn)集合,再更新到當(dāng)前點(diǎn)的最短距離阎曹;和Prim類似伪阶,區(qū)別在于會(huì)更新最小距離。


image.png

代碼:

void Dij(Graph &G,int start, vector<int>Dist){
  int n=G.num;
  vector<int>Final(num,0);
  vector<int>Path(num,-1);
  Final[start]=1;
  Path[start]=-1;
  Dist[start]=0;
  int min_value=Maxsize;
  int min_index=start;
  while(Ture){
      int flag=0;
      for(int i=0;i<n;i++){
          if(Final[i]){
              for(int j=0;j<n;j++){
                  if(Dist[i]+G[i][j]<Dist[i]) { 
                      Dist[i]= (Dist[i]+G[i][j];
                      Path[j]=i; 
                  }  
                }
            }
            else{
                min_value=Dist[i]>min_value?min_value:Dist[i];
                min_index=i;
            }
      }
      Final[min_index]=1;
      for(int i=0;i<n;i++){
          if(!Final[i]){flag=1;}
      }
      if(flag=0)break;
    }
}
Dijkstra堆優(yōu)化:
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末处嫌,一起剝皮案震驚了整個(gè)濱河市栅贴,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌熏迹,老刑警劉巖檐薯,帶你破解...
    沈念sama閱讀 211,042評(píng)論 6 490
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異,居然都是意外死亡坛缕,警方通過(guò)查閱死者的電腦和手機(jī)墓猎,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 89,996評(píng)論 2 384
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)赚楚,“玉大人毙沾,你說(shuō)我怎么就攤上這事〕枰常” “怎么了左胞?”我有些...
    開(kāi)封第一講書(shū)人閱讀 156,674評(píng)論 0 345
  • 文/不壞的土叔 我叫張陵,是天一觀的道長(zhǎng)举户。 經(jīng)常有香客問(wèn)我烤宙,道長(zhǎng),這世上最難降的妖魔是什么敛摘? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 56,340評(píng)論 1 283
  • 正文 為了忘掉前任门烂,我火速辦了婚禮,結(jié)果婚禮上兄淫,老公的妹妹穿的比我還像新娘屯远。我一直安慰自己,他們只是感情好捕虽,可當(dāng)我...
    茶點(diǎn)故事閱讀 65,404評(píng)論 5 384
  • 文/花漫 我一把揭開(kāi)白布慨丐。 她就那樣靜靜地躺著,像睡著了一般泄私。 火紅的嫁衣襯著肌膚如雪房揭。 梳的紋絲不亂的頭發(fā)上,一...
    開(kāi)封第一講書(shū)人閱讀 49,749評(píng)論 1 289
  • 那天晌端,我揣著相機(jī)與錄音捅暴,去河邊找鬼。 笑死咧纠,一個(gè)胖子當(dāng)著我的面吹牛蓬痒,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播漆羔,決...
    沈念sama閱讀 38,902評(píng)論 3 405
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼梧奢,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來(lái)了演痒?” 一聲冷哼從身側(cè)響起亲轨,我...
    開(kāi)封第一講書(shū)人閱讀 37,662評(píng)論 0 266
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎鸟顺,沒(méi)想到半個(gè)月后惦蚊,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 44,110評(píng)論 1 303
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,451評(píng)論 2 325
  • 正文 我和宋清朗相戀三年蹦锋,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了曾撤。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 38,577評(píng)論 1 340
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡晕粪,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出渐裸,到底是詐尸還是另有隱情巫湘,我是刑警寧澤,帶...
    沈念sama閱讀 34,258評(píng)論 4 328
  • 正文 年R本政府宣布昏鹃,位于F島的核電站尚氛,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏洞渤。R本人自食惡果不足惜阅嘶,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,848評(píng)論 3 312
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望载迄。 院中可真熱鬧讯柔,春花似錦、人聲如沸护昧。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 30,726評(píng)論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)惋耙。三九已至捣炬,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間绽榛,已是汗流浹背湿酸。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 31,952評(píng)論 1 264
  • 我被黑心中介騙來(lái)泰國(guó)打工, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留灭美,地道東北人推溃。 一個(gè)月前我還...
    沈念sama閱讀 46,271評(píng)論 2 360
  • 正文 我出身青樓,卻偏偏與公主長(zhǎng)得像冲粤,于是被迫代替她去往敵國(guó)和親美莫。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 43,452評(píng)論 2 348

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