We have an array A
of non-negative integers.
For every (contiguous) subarray B = [A[i], A[i+1], ..., A[j]]
(with i <= j
), we take the bitwise OR of all the elements in B
, obtaining a result A[i] | A[i+1] | ... | A[j]
.
Return the number of possible results. (Results that occur more than once are only counted once in the final answer.)
Runtime: 652 ms
Memory Usage: 49.7 MB
class Solution { public: int subarrayBitwiseORs(vector<int>& A) { unordered_set<int> s; set<int> t; for(int i : A) { set<int> r; r.insert(i); for(int j : t) r.insert(j | i); t = r; for(int j : t) s.insert(j); } return s.size(); } };