贪心4

  1. 用最少数量的箭引爆气球
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;
    }
};
  1. 无重叠区间
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;
    }
};
  1. 划分字母区间
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;
    }
};
posted @ 2025-02-15 20:41  skyler886  阅读(6)  评论(0)    收藏  举报