考察的知识点:贪心;

解答方法分析:

  1. 根据奶牛的起始位置对cow_ranges中的元素进行排序,以确保处理的起始位置是从小到大的顺序。
  2. 初始化计数器count为0,表示初始并行攻击次数。
  3. 初始化两个指针leftright,初始值都为0。
  4. 进入循环,当left小于列表的长度时进行迭代。
  5. 在每次迭代中,将cow_ranges[left][1]赋值给end,表示当前奶牛的攻击范围的右边界。
  6. 在内层循环中,逐个检查从right到列表的末尾的奶牛的起始位置。如果奶牛的起始位置小于等于end,则更新endmin(end, cow_ranges[right][1]),表示可以并行攻击的奶牛的最右边界。
  7. 在内层循环结束后,将right的值赋给left,表示已经处理完当前并行攻击范围内的奶牛。
  8. count加1,表示已经进行了一次并行攻击。
  9. 重复步骤4到步骤8,直到left超过列表的长度。
  10. 返回最终结果,即count的值,表示最小的并行攻击次数。

所用编程语言:C++;

完整编程代码:↓

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