leetcode 354. Russian Doll Envelopes

思路:

1. 按宽度对envelops进行升序排列,对相同宽度的envelops按长度降序排列

2. 对重新排好序的envelops,求最长严格升序的envelops长度序列,返回序列长度。


代码:

class Solution {
public:
    int maxEnvelopes(vector<pair<int, int>>& envelopes) {
        sort(envelopes.begin(), envelopes.end(), cmp);
        vector<int> dp;
        for (int i = 0; i < envelopes.size(); ++i)
            binarySearch(dp,envelopes[i].second);
        return dp.size();
    }
    static bool cmp(pair<int, int>& a, pair<int, int>& b){
        return (a.first == b.first) ? 
            (a.second > b.second) : (a.first < b.first); 
    }
    void binarySearch(vector<int>& dp, int value){
      int low = 0, high = dp.size() - 1;
      while (low <= high){
          int mid = (low + high) / 2;
          if (dp[mid] < value)
            low = mid + 1;
          else if (dp[mid] > value)
                high = mid -1;
          else 
            return;
      }
      if (dp.size() > low)
        dp[low] = value;
      else
        dp.push_back(value);
  }  
};



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值