第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號(hào)安全,請(qǐng)及時(shí)綁定郵箱和手機(jī)立即綁定

leetcode題解(貪心算法)

leetcode题解(贪心算法)

文章地址:吴军旗---原文地址

定义

贪心算法(又称贪婪算法)是指,在对问题求解时,总是做出在当前看来是最好的选择。 也就是说,不从整体最优上加以考虑,他所做出的是在某种意义上的局部最优解。

通常贪心算法的代码会非常短而且思路也非常的简单,但贪心算法真正的难点在于确定我们当前的问题确实可以使用贪心算法。

leetcode 455. 分发饼干


https://img1.sycdn.imooc.com//5b45b3760001ee7609580655.jpg


解题思路

这是一道简单的贪心算法问题。我们尝试将最大的饼干给最贪心的小朋友,如果可以满足最贪心的小朋友,我们留给下一个次贪心的小朋友的饼干也是当前看来最大的。如果最大的饼干都无法满足最贪心的小朋友,那么就表明无法满足这个小朋友。

    class Solution {     public:         int findContentChildren(vector<int>& g, vector<int>& s) {                  sort(g.begin(), g.end(), greater<int>());             sort(s.begin(), s.end(), greater<int>());                  int gi = 0, si = 0;             int res = 0;             while( gi < g.size() && si < s.size() ){                      if( s[si] >= g[gi] ){                     res ++;                     si ++;                     gi ++;                 } else {                     gi ++;                 }             }                  return res;         }     };      复制代码

贪心算法通常和排序是分不开的,如果题目给出数组没有排序,我们就需要自己进行排序。


贪心算法与动态规划的关系


https://img1.sycdn.imooc.com//5b45b3860001706f09590663.jpg


动态规划方法

解题思路

我们可以首先想一下暴力解法:找出所有子区间的组合,之后判断它是否重叠。O((2^n)*n)
先要排序,方便判断不重叠。

这道题很像最长上升子序列我们首先使用动态规划解决这道题:

实现

              // Definition for an interval.     struct Interval {         int start;         int end;         Interval() : start(0), end(0) {}         Interval(int s, int e) : start(s), end(e) {}     };          bool compare(const Interval &a, const Interval &b){              if( a.start != b.start )             return a.start < b.start;         return a.end < b.end;     }          // 动态规划     class Solution {     public:         int eraseOverlapIntervals(vector<Interval>& intervals) {                  if( intervals.size() == 0 ) {                 return 0;             }                  sort(intervals.begin(), intervals.end(), compare);                  // memo[i]表示以intervals[i]为结尾的区间能构成的最长不重叠区间序列             vector<int> memo( intervals.size() , 1 );             for( int i = 1 ; i < intervals.size() ; i ++ ) {                 // memo[i]                 for( int j = 0 ; j < i ; j ++ ) {                     if( intervals[i].start >= intervals[j].end ) {                         memo[i] = max( memo[i] , 1 + memo[j] );                     }                 }             }                  int res = 0;             for( int i = 0 ; i < memo.size() ; i ++ ) {                 res = max( res , memo[i] );             }                  return intervals.size() - res;         }     };      复制代码

贪心算法解决

解题思路

注意:每次选择中,每个区间的结尾很重要。
结尾越小,留给了后面越大的空间,后面越有可能容纳更多区间。
贪心算法:按照区间的结尾排序,每次选择结尾最早的,且和前一个区间不重叠的区间。

实现

     // Definition for an interval.     struct Interval {         int start;         int end;         Interval() : start(0), end(0) {}         Interval(int s, int e) : start(s), end(e) {}     };          bool compare(const Interval &a, const Interval &b){         if( a.end != b.end )             return a.end < b.end;         return a.start < b.start;     }          // 贪心算法     class Solution {     public:         int eraseOverlapIntervals(vector<Interval>& intervals) {                  if( intervals.size() == 0 ) {                 return 0;             }                  sort(intervals.begin(), intervals.end(), compare);                  int res = 1;             int pre = 0;             for( int i = 1 ; i < intervals.size() ; i ++ ) {                 if( intervals[i].start >= intervals[pre].end ){                     res ++;                     pre = i;                 }             }                  return intervals.size() -  res;         }     };      复制代码

贪心选择性质的证明

  • 贪心算法为A;最优算法为O;发现A完全能替代O,且不影响求出最优解。

  • 如果无法使用贪心算法,举出反例即可


點(diǎn)擊查看更多內(nèi)容
TA 點(diǎn)贊

若覺(jué)得本文不錯(cuò),就分享一下吧!

評(píng)論

作者其他優(yōu)質(zhì)文章

正在加載中
  • 推薦
  • 評(píng)論
  • 收藏
  • 共同學(xué)習(xí),寫(xiě)下你的評(píng)論
感謝您的支持,我會(huì)繼續(xù)努力的~
掃碼打賞,你說(shuō)多少就多少
贊賞金額會(huì)直接到老師賬戶(hù)
支付方式
打開(kāi)微信掃一掃,即可進(jìn)行掃碼打賞哦
今天注冊(cè)有機(jī)會(huì)得

100積分直接送

付費(fèi)專(zhuān)欄免費(fèi)學(xué)

大額優(yōu)惠券免費(fèi)領(lǐng)

立即參與 放棄機(jī)會(huì)
微信客服

購(gòu)課補(bǔ)貼
聯(lián)系客服咨詢(xún)優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動(dòng)學(xué)習(xí)伙伴

公眾號(hào)

掃描二維碼
關(guān)注慕課網(wǎng)微信公眾號(hào)

舉報(bào)

0/150
提交
取消