久久国产成人av_抖音国产毛片_a片网站免费观看_A片无码播放手机在线观看,色五月在线观看,亚洲精品m在线观看,女人自慰的免费网址,悠悠在线观看精品视频,一级日本片免费的,亚洲精品久,国产精品成人久久久久久久

分享

354. 俄羅斯套娃信封問題

 小樣樣樣樣樣樣 2022-12-21 發(fā)布于北京

給你一個(gè)二維整數(shù)數(shù)組 envelopes ,其中 envelopes[i] = [wi, hi] ,,表示第 i 個(gè)信封的寬度和高度,。

當(dāng)另一個(gè)信封的寬度和高度都比這個(gè)信封大的時(shí)候,這個(gè)信封就可以放進(jìn)另一個(gè)信封里,,如同俄羅斯套娃一樣,。

請(qǐng)計(jì)算 最多能有多少個(gè) 信封能組成一組“俄羅斯套娃”信封(即可以把一個(gè)信封放到另一個(gè)信封里面)。

注意:不允許旋轉(zhuǎn)信封,。

 
示例 1:

輸入:envelopes = [[5,4],[6,4],[6,7],[2,3]]
輸出:3
解釋:最多信封的個(gè)數(shù)為 3, 組合為: [2,3] => [5,4] => [6,7],。
示例 2:

輸入:envelopes = [[1,1],[1,1],[1,1]]
輸出:1

面試題 17.08. 馬戲團(tuán)人塔一樣是最長遞增子序列的二維模式

我們可以對(duì)第一維進(jìn)度升序的排序,然后對(duì)第一維相等的數(shù)進(jìn)行降序的排序,,這樣就可以不管第一維,,直接進(jìn)行第二維的最長遞增子序列求解。

先看個(gè)例子,,假如排序的結(jié)果是下面這樣:


[[2, 3], [5, 4], [6, 5], [6, 7]]
如果我們只看第二個(gè)維度 [3, 4, 5, 7][3,4,5,7],,會(huì)得出最長遞增子序列的長度是 4 的結(jié)論。實(shí)際上,,由于第 3 和第 4 個(gè)信封的第一個(gè)維度都是 6,,導(dǎo)致他們不能套娃。所以,,利用第一個(gè)維度遞增,,第二個(gè)維度遞減的順序排序,會(huì)得到下面的結(jié)果:


[[2, 3], [5, 4], [6, 7], [6, 5]]
這個(gè)時(shí)候,,只看第二個(gè)維度 [3, 4, 7, 5][3,4,7,5],,就會(huì)得到最長遞增子序列的長度是 3 的正確結(jié)果。

主要有底下兩種解法,,一種是動(dòng)態(tài)規(guī)劃,,還一種是貪心+二分

class Solution {
public:
  // 動(dòng)態(tài)規(guī)劃
    int bestSeqAtIndex(vector<int>& height, vector<int>& weight) {
        int num = height.size();
        vector<vector<int>> temp(num);
        vector<int> dp(num,1);
        int maxnum = 1;
        for(int i = 0; i < num; i++){
            temp[i] = {height[i],weight[i]};
        }
        sort(temp.begin(),temp.end(),[](vector<int> &temp1, vector<int> &temp2){
            return temp1[0] < temp2[0] || temp1[0] == temp2[0] && temp1[1] > temp2[1];
        });
        for(int i = 0; i < num; i++){
            for(int j = 0; j < i; j++){
                if(temp[j][1] < temp[i][1]){
                    dp[i] = max(dp[i],dp[j] + 1);
                    maxnum = max(maxnum,dp[i]);
                }
            }
        }
        return maxnum;
    }
};

 

 

class Solution {
public: 
    /* 
        先按寬從小到大排序,但是同一個(gè)寬度的按高度從大到小排序,,然后高度就按最長子序列這種題型來做(貪心 + 二分),。
    */
    int maxEnvelopes(vector<vector<int>>& envelopes) {
        sort(envelopes.begin(),envelopes.end(),[](vector<int> &x1, vector<int> &x2){
            return x1[0] < x2[0] || (x1[0] == x2[0] && x1[1] > x2[1]); 
        });
        int length = envelopes.size();
        vector<int> tail;
        int maxnum = 1;
        tail.push_back(envelopes[0][1]);
        for(int i = 0; i < length; i++){
            if(envelopes[i][1] > tail.back()){
                tail.push_back(envelopes[i][1]);
            }
            else{
                vector<int> ::iterator iter = lower_bound(tail.begin(),tail.end(),envelopes[i][1]);
                *iter = envelopes[i][1];
            }
        }
        return tail.size();
    }
};

 

    本站是提供個(gè)人知識(shí)管理的網(wǎng)絡(luò)存儲(chǔ)空間,所有內(nèi)容均由用戶發(fā)布,,不代表本站觀點(diǎn),。請(qǐng)注意甄別內(nèi)容中的聯(lián)系方式、誘導(dǎo)購買等信息,,謹(jǐn)防詐騙,。如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,,請(qǐng)點(diǎn)擊一鍵舉報(bào)。
    轉(zhuǎn)藏 分享 獻(xiàn)花(0

    0條評(píng)論

    發(fā)表

    請(qǐng)遵守用戶 評(píng)論公約

    類似文章 更多