区间处理——无重叠区间
原题在这里,
看这个题就想起了前面写过的合并区间,我寻思(瞎搞)着可能差不多,于是对区间左端点排序然后双指针遍历,
然后发现写不出来(爇鞲)。。。
我又想这肯定dp也能做,但是dp我真不太行(真懒,一点都没有思考),索性直接看题解了,
果然解法一:dp
因为是dp,所以无论左端点右端点排序都行,转移方程f[i]=max(f[i],f[j]+1),(i<j&&li>=rj)
按dp来说,这是非常水的水题,但是我真没思考。。。
解法二:贪心
对右端点排序,正常li>=rj,ans++遍历就行了
【太蠢了所以Over】
学到了vector容器的sort指定排序写法:
sort(intervals.begin(), intervals.end(), [](const auto &u, const auto &v) { return u[1] < v[1]; });
AC_code:
class Solution { public: int eraseOverlapIntervals(vector<vector<int>> &intervals) { if (intervals.empty()) return 0; sort(intervals.begin(), intervals.end(), [](const auto &u, const auto &v) { return u[1] < v[1]; }); int n = intervals.size(); int right = intervals[0][1]; int ans = 1; for (int i = 1; i < n; ++i) { if (intervals[i][0] >= right) { ++ans; right = intervals[i][1]; } } return n - ans; } };
搜索
复制

浙公网安备 33010602011771号