Skip to content

Commit 3456f45

Browse files
committed
feat: add solutions to lc problem: No.0898
No.0898.Bitwise ORs of Subarrays
1 parent 47c1231 commit 3456f45

File tree

6 files changed

+212
-14
lines changed

6 files changed

+212
-14
lines changed

solution/0800-0899/0898.Bitwise ORs of Subarrays/README.md

+75-1
Original file line numberDiff line numberDiff line change
@@ -63,15 +63,89 @@
6363
<!-- 这里可写当前语言的特殊实现逻辑 -->
6464

6565
```python
66-
66+
class Solution:
67+
def subarrayBitwiseORs(self, arr: List[int]) -> int:
68+
s = set()
69+
prev = 0
70+
for i, v in enumerate(arr):
71+
prev |= v
72+
curr = 0
73+
for j in range(i, -1, -1):
74+
curr |= arr[j]
75+
s.add(curr)
76+
if curr == prev:
77+
break
78+
return len(s)
6779
```
6880

6981
### **Java**
7082

7183
<!-- 这里可写当前语言的特殊实现逻辑 -->
7284

7385
```java
86+
class Solution {
87+
public int subarrayBitwiseORs(int[] arr) {
88+
Set<Integer> s = new HashSet<>();
89+
int prev = 0;
90+
for (int i = 0; i < arr.length; ++i) {
91+
prev |= arr[i];
92+
int curr = 0;
93+
for (int j = i; j >= 0; --j) {
94+
curr |= arr[j];
95+
s.add(curr);
96+
if (curr == prev) {
97+
break;
98+
}
99+
}
100+
}
101+
return s.size();
102+
}
103+
}
104+
```
105+
106+
### **C++**
107+
108+
```cpp
109+
class Solution {
110+
public:
111+
int subarrayBitwiseORs(vector<int>& arr) {
112+
unordered_set<int> s;
113+
int prev = 0;
114+
for (int i = 0; i < arr.size(); ++i)
115+
{
116+
prev |= arr[i];
117+
int curr = 0;
118+
for (int j = i; ~j; --j)
119+
{
120+
curr |= arr[j];
121+
s.insert(curr);
122+
if (curr == prev) break;
123+
}
124+
}
125+
return s.size();
126+
}
127+
};
128+
```
74129
130+
### **Go**
131+
132+
```go
133+
func subarrayBitwiseORs(arr []int) int {
134+
s := map[int]bool{}
135+
prev := 0
136+
for i, v := range arr {
137+
prev |= v
138+
curr := 0
139+
for j := i; j >= 0; j-- {
140+
curr |= arr[j]
141+
s[curr] = true
142+
if curr == prev {
143+
break
144+
}
145+
}
146+
}
147+
return len(s)
148+
}
75149
```
76150

77151
### **...**

solution/0800-0899/0898.Bitwise ORs of Subarrays/README_EN.md

+75-1
Original file line numberDiff line numberDiff line change
@@ -52,13 +52,87 @@ There are 3 unique values, so the answer is 3.
5252
### **Python3**
5353

5454
```python
55-
55+
class Solution:
56+
def subarrayBitwiseORs(self, arr: List[int]) -> int:
57+
s = set()
58+
prev = 0
59+
for i, v in enumerate(arr):
60+
prev |= v
61+
curr = 0
62+
for j in range(i, -1, -1):
63+
curr |= arr[j]
64+
s.add(curr)
65+
if curr == prev:
66+
break
67+
return len(s)
5668
```
5769

5870
### **Java**
5971

6072
```java
73+
class Solution {
74+
public int subarrayBitwiseORs(int[] arr) {
75+
Set<Integer> s = new HashSet<>();
76+
int prev = 0;
77+
for (int i = 0; i < arr.length; ++i) {
78+
prev |= arr[i];
79+
int curr = 0;
80+
for (int j = i; j >= 0; --j) {
81+
curr |= arr[j];
82+
s.add(curr);
83+
if (curr == prev) {
84+
break;
85+
}
86+
}
87+
}
88+
return s.size();
89+
}
90+
}
91+
```
92+
93+
### **C++**
94+
95+
```cpp
96+
class Solution {
97+
public:
98+
int subarrayBitwiseORs(vector<int>& arr) {
99+
unordered_set<int> s;
100+
int prev = 0;
101+
for (int i = 0; i < arr.size(); ++i)
102+
{
103+
prev |= arr[i];
104+
int curr = 0;
105+
for (int j = i; ~j; --j)
106+
{
107+
curr |= arr[j];
108+
s.insert(curr);
109+
if (curr == prev) break;
110+
}
111+
}
112+
return s.size();
113+
}
114+
};
115+
```
61116
117+
### **Go**
118+
119+
```go
120+
func subarrayBitwiseORs(arr []int) int {
121+
s := map[int]bool{}
122+
prev := 0
123+
for i, v := range arr {
124+
prev |= v
125+
curr := 0
126+
for j := i; j >= 0; j-- {
127+
curr |= arr[j]
128+
s[curr] = true
129+
if curr == prev {
130+
break
131+
}
132+
}
133+
}
134+
return len(s)
135+
}
62136
```
63137

64138
### **...**
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,19 @@
1+
class Solution {
2+
public:
3+
int subarrayBitwiseORs(vector<int>& arr) {
4+
unordered_set<int> s;
5+
int prev = 0;
6+
for (int i = 0; i < arr.size(); ++i)
7+
{
8+
prev |= arr[i];
9+
int curr = 0;
10+
for (int j = i; ~j; --j)
11+
{
12+
curr |= arr[j];
13+
s.insert(curr);
14+
if (curr == prev) break;
15+
}
16+
}
17+
return s.size();
18+
}
19+
};
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,16 @@
1+
func subarrayBitwiseORs(arr []int) int {
2+
s := map[int]bool{}
3+
prev := 0
4+
for i, v := range arr {
5+
prev |= v
6+
curr := 0
7+
for j := i; j >= 0; j-- {
8+
curr |= arr[j]
9+
s[curr] = true
10+
if curr == prev {
11+
break
12+
}
13+
}
14+
}
15+
return len(s)
16+
}
Original file line numberDiff line numberDiff line change
@@ -1,16 +1,18 @@
11
class Solution {
2-
public int subarrayBitwiseORs(int[] A) {
3-
int maxVal = Arrays.stream(A).max().getAsInt();
4-
int mask = (Integer.highestOneBit(maxVal) << 1) - 1;
5-
Set<Integer> res = new HashSet<>();
6-
for (int i = 0; i < A.length; ++i) {
7-
int val = A[i];
8-
res.add(val);
9-
for (int j = i - 1; j >= 0 && val != mask; --j) {
10-
val |= A[j];
11-
res.add(val);
2+
public int subarrayBitwiseORs(int[] arr) {
3+
Set<Integer> s = new HashSet<>();
4+
int prev = 0;
5+
for (int i = 0; i < arr.length; ++i) {
6+
prev |= arr[i];
7+
int curr = 0;
8+
for (int j = i; j >= 0; --j) {
9+
curr |= arr[j];
10+
s.add(curr);
11+
if (curr == prev) {
12+
break;
13+
}
1214
}
1315
}
14-
return res.size();
16+
return s.size();
1517
}
16-
}
18+
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,13 @@
1+
class Solution:
2+
def subarrayBitwiseORs(self, arr: List[int]) -> int:
3+
s = set()
4+
prev = 0
5+
for i, v in enumerate(arr):
6+
prev |= v
7+
curr = 0
8+
for j in range(i, -1, -1):
9+
curr |= arr[j]
10+
s.add(curr)
11+
if curr == prev:
12+
break
13+
return len(s)

0 commit comments

Comments
 (0)