LeetCode——354.俄罗斯套娃信封问题(困难)【LIS & 二分】

LeetCode——354.俄罗斯套娃信封问题(困难)【LIS & 二分】_第1张图片


题解

  • w按照升序排序之后,对于h求LIS即可
  • 注意排序时,w相同的,要按照h降序排序。这样可以防止w相同,求h的lis出现违法情况

class Solution {
public:
   int maxEnvelopes(vector<vector<int>>& envelopes) {
		sort(envelopes.begin(), envelopes.end(), [](const vector<int>& a, const vector<int>& b) {
			if (a[0] != b[0])	return a[0] < b[0];
			else return a[1] > b[1];
		});
		// b存储小于当前env[1]的最大h
		vector<int> b(envelopes.size() + 1, 0);
		int len = 0;
		for (vector<int>& env : envelopes) {
			if (env[1] > b[len]) {
				b[++len] = env[1];
			}
			else {
				int low = 0, high = len;
				while (low < high) {
					int mid = low + (high - low) / 2;
					if (env[1] <= b[mid])	high = mid;
					else  low = mid+1;
				}
				b[low] = env[1];
			}
		}
		return len;
	}
};

你可能感兴趣的:(LeetCode,二分)