区间题型的第四类题。
思路:贪心。
实现细节:先按照起点排序,在能够覆盖起点的区间内找右端点的最大值。
class Solution {
public:
int videoStitching(vector<vector<int>>& clips, int time) {
vector<pair<int, int>> v;
for (auto& each : clips) {
v.push_back({each[0], each[1]});
}
sort(v.begin(), v.end());
int l = 0, r = 0, ans = 0; //l保存起点 r保存最远距离
for (int i = 0; i < v.size(); ++i) {
if (v[i].first > r) return -1; //起点比最远的还远
else if (v[i].first <= l) { //满足起点的情况
r = max(r, v[i].second);
}else if (v[i].second > r){
ans++;
l = r;
r = v[i].second;
}
if (r >= time) return ans + 1;
}
return -1;
}
};
易错点:
1:更新完r后,都要与time比较。