- Trending Categories
Data Structure
Networking
RDBMS
Operating System
Java
MS Excel
iOS
HTML
CSS
Android
Python
C Programming
C++
C#
MongoDB
MySQL
Javascript
PHP
Physics
Chemistry
Biology
Mathematics
English
Economics
Psychology
Social Studies
Fashion Studies
Legal Studies
- Selected Reading
- UPSC IAS Exams Notes
- Developer's Best Practices
- Questions and Answers
- Effective Resume Writing
- HR Interview Questions
- Computer Glossary
- Who is Who
Bulb Switcher III in C++
Suppose we have a room with n bulbs, these are numbered from 1 to n, arranged in a row from left to right. Initially, all the bulbs are turned off. At moment k (for k in range 0 to n - 1), we turn on the light[k] bulb. A bulb changes color to blue only if it is on and all the previous bulbs (to the left) are turned on too. We have to find the number of moments in which all turned on bulbs is blue. So this is an example −
The output will be 3 as the moments are 1, 2 and 4.
To solve this, we will follow these steps −
ret := 0, define a set x, n := size of list array, define a map m
define a max heap-based priority queue pq
for I in range 0 to n – 1
m[light[i]] := i and insert i into pq
for I in range 1 to n
insert m[i] into x
while pq is not empty and top element of pq is in the set x,
delete from pq
ret := ret + 1 when (pq is empty or top of pq >= i), otherwise 0
return res
Example (C++)
Let us see the following implementation to get a better understanding −
#include <bits/stdc++.h> using namespace std; class Solution { public: int numTimesAllBlue(vector<int>& light) { int ret = 0; set <int> x; int n = light.size(); map <int, int> m; priority_queue <int, vector <int>, greater <int> > pq; for(int i = 0; i < n; i++){ m[light[i]] = i; pq.push(i); } for(int i = 1; i <=n; i++){ x.insert(m[i]); while(!pq.empty() && x.count(pq.top()))pq.pop(); ret += (pq.empty() || (pq.top() >= i)); } return ret; } }; main(){ vector<int> v = {2,1,3,5,4}; Solution ob; cout << (ob.numTimesAllBlue(v)); }
Input
[2,1,3,5,4]
Output
3