知识点

贪心

思路

按照右端点排序,并维护上一次的攻击的地点,如果攻击地点在区间范围内,则可以不处理;否则把当前段的右端点设置为新的攻击地点,这样可以更多的攻击到后面的牛。

由于要排序,时间复杂度为O(nlogn)

AC Code(C++)

class Solution {
public:
    /**
     * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
     *
     * 
     * @param cow_ranges int整型vector<vector<>> 
     * @return int整型
     */
    int minParallelAttacks(vector<vector<int> >& cow_ranges) {
        sort(cow_ranges.begin(), cow_ranges.end(), [](vector<int>& a, vector<int>& b) {
            return a[1] < b[1];
        });
        int n = cow_ranges.size();
        int last = cow_ranges[0][1], res = 1;
        for (int i = 1; i < n; i ++) {
            if (last >= cow_ranges[i][0] and last <= cow_ranges[i][1]) continue;
            res += 1;
            last = cow_ranges[i][1];
        }
        return res;
    }
};