题目大意
给n个点,求
的最大的链,n方的做法有很多,这里说nlogn的做法
先给x排序,然后如果第一维度相同第二维度倒序排序,然后球LIS即可
代码实现
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27
| class Solution { int arr[101001]; vector<int>v; int getLIS(){ for(int i=0;i<101001;i++)arr[i]=1e9+10; int l = 0; arr[0]=0; for(int i=0;i<v.size();i++){ if(v[i]>arr[l])arr[++l]=v[i]; else { int pos = lower_bound(arr + 1, arr + l + 1, v[i]) - arr; arr[pos]=v[i]; } } return l; } public: int maxEnvelopes(vector<vector<int>>& envelopes) { sort(envelopes.begin(),envelopes.end(),[](const vector<int>& a,const vector<int>& b){ return a[0]<b[0]||(a[0]==b[0]&&a[1]>b[1]);}); for(int i=0;i<envelopes.size();i++){ v.push_back(envelopes[i][1]); } return getLIS();
} };
|