📜  查找进入或离开房间的最小和最大不同人员

📅  最后修改于: 2022-05-13 01:56:09.472000             🧑  作者: Mango

查找进入或离开房间的最小和最大不同人员

给定一个二进制字符串people,其中'1''0'分别代表进入和离开房间的。任务是找到进入或离开建筑物的最小和最大不同人员。

例子:

方法可以根据以下观察解决问题:

请按照下图进行更好的理解。

插图:

按照以下步骤实施上述观察:

  • 开始遍历整个字符串people
  • 如果people[i] = '1'然后递增输入并重新初始化退出0
  • 否则,如果people[i]='0'然后递增exited并重新初始化输入0
  • {entered, exited}N (字符串的大小的最大值存储为对result的第一个和第二个值。
  • 返回结果作为包含最小和最大不同人分别作为第一和第二值的最终对。

下面是上述方法的实现:

C++14
// C++ code to implement the approach
  
#include 
using namespace std;
  
// Function to find the minimum and
// maximum number of possible persons
// entering or leaving the room
pair minDistPersons(string& persons)
{
    int N = persons.length();
    int entered = 0, exited = 0;
    pair result = { 0, N };
  
    for (int i = 0; i < N; i++) {
        if (persons[i] == '1') {
            entered++;
            exited = 0;
        }
        else {
            entered = 0;
            exited++;
        }
        result.first
            = max({ result.first, entered,
                    exited });
    }
  
    return result;
}
  
// Driver code
int main()
{
    string persons = "10101";
  
    // Function call
    pair ans = minDistPersons(persons);
    cout << "Minimum Persons: " << ans.first
         << "\n";
    cout << "Maximum Persons: " << ans.second;
    return 0;
}


输出
Minimum Persons: 1
Maximum Persons: 5

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