- 用最少数量的箭引爆气球
class Solution {
public:
int findMinArrowShots(vector<vector<int>>& points) {
int answer = 1;
sort(points.begin(), points.end(), [](vector<int> a, vector<int> b)
{
if(a[1] == b[1])
return a[0] < b[0];
return a[1] < b[1];
});
int curEnd = points[0][1];
for(int i = 1; i < points.size(); i++)
{
if(curEnd < points[i][0])
{
answer++;
curEnd = points[i][1];
}
}
return answer;
}
};
- 无重叠区间
class Solution {
public:
int eraseOverlapIntervals(vector<vector<int>>& intervals) {
int res = 0;
sort(intervals.begin(), intervals.end(), [](vector<int> a, vector<int> b)->bool {
return a[1] < b[1];
});
int pre = intervals[0][1];
for(int i = 1; i < intervals.size(); i++)
{
if(pre > intervals[i][0])
res++;
else
pre = intervals[i][1];
}
return res;
}
};
- 划分字母区间
class Solution {
public:
vector<int> partitionLabels(string s) {
int hash[27] = {0};
for(int i = 0; i < s.size(); i++)
{
hash[s[i] - 'a'] = i;
}
vector<int> result;
int left = 0, right = 0;
for(int i = 0;i < s.size(); i++)
{
right = max(hash[s[i] - 'a'], right);
if(i == right)
{
result.push_back(right - left + 1);
left = i + 1;
}
}
return result;
}
};