📌  相关文章
📜  给定油漆持续时间和日期限制时,可以连续油漆的最大房屋

📅  最后修改于: 2021-10-26 05:24:31             🧑  作者: Mango

给定的阵列ARR [] []N对,使得每一对{L,R}代表i房子可以在天的L一天涂在R之前,任务是找到房子的最大数目可以连续绘制。

例子:

方法:该问题可以使用贪心方法解决。这个想法是从当前 LastDay 中最低的 DaysRequired 中进行选择。请按照以下步骤操作。

  • 初始化一个向量,比如V,来存储所有可以取的对。
  • 使用比较器pair.second小于pair.first对向量V 进行排序
  • 初始化一个优先级队列pq并推送向量V 的第一对。
  • 初始化一个变量,比如t ,以存储时间。
  • 遍历向量V并将当前对放入优先级队列pq 中
    • 如果t+DaysRequired小于或等于LastDay ,则继续
    • 否则,从优先级队列中弹出,存储在临时变量中并更新t等于t – temp.first
  • 最后,返回优先级队列的大小。

下面是上述方法的实现:

C++14
// C++ prograam for the above approach
#include 
using namespace std;
  
typedef vector > Matrix;
  
// Comparator for sorting
static bool cmp(pair a, pair b)
{
    return a.second < b.second;
}
  
// Function to count number of houses
// that can be painted
void countMaxPinted(int n, Matrix& paint)
{
  
    // Vector to store the pairs
    vector > V;
    for (int i = 0; i < n; i++) {
  
        // If house can be painted
        if (paint[i][0] <= paint[i][1]) {
            V.push_back(make_pair(paint[i][0], paint[i][1]));
        }
    }
  
    // Sort the vector
    sort(V.begin(), V.end(), cmp);
  
    // If vector is empty
    if (V.size() == 0) {
        cout << 0 << endl;
        return;
    }
  
    // Initialize t
    int t = V[0].first;
  
    // Initialize priority queue
    priority_queue > pq;
    pq.push(V[0]);
  
    // Traversing the vector
    for (int i = 1; i < V.size(); i++) {
        t += V[i].first;
  
        // Pushing in Vectors
        pq.push(V[i]);
        if (t <= V[i].second) {
            continue;
        }
        else {
  
            // Pop the top element
            auto temp = pq.top();
            pq.pop();
            t = t - temp.first;
        }
    }
  
    // Print the ans
    cout << pq.size() << endl;
}
  
// Driver Code
int main()
{
  
    // Given Input
    int n = 4;
    Matrix paint = { { 1, 19 }, { 2, 2 }, { 4, 17 }, { 1, 1 } };
  
    // Function Call
    countMaxPinted(n, paint);
}


输出
3

时间复杂度: O(NlogN)
辅助空间: O(N)

如果您希望与专家一起参加现场课程,请参阅DSA 现场工作专业课程学生竞争性编程现场课程。