File tree 6 files changed +212
-14
lines changed
solution/0800-0899/0898.Bitwise ORs of Subarrays
6 files changed +212
-14
lines changed Original file line number Diff line number Diff line change 63
63
<!-- 这里可写当前语言的特殊实现逻辑 -->
64
64
65
65
``` 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)
67
79
```
68
80
69
81
### ** Java**
70
82
71
83
<!-- 这里可写当前语言的特殊实现逻辑 -->
72
84
73
85
``` 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
+ ```
74
129
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
+ }
75
149
```
76
150
77
151
### ** ...**
Original file line number Diff line number Diff line change @@ -52,13 +52,87 @@ There are 3 unique values, so the answer is 3.
52
52
### ** Python3**
53
53
54
54
``` 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)
56
68
```
57
69
58
70
### ** Java**
59
71
60
72
``` 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
+ ```
61
116
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
+ }
62
136
```
63
137
64
138
### ** ...**
Original file line number Diff line number Diff line change
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 number Diff line number Diff line change
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 number Diff line number Diff line change 1
1
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
+ }
12
14
}
13
15
}
14
- return res .size ();
16
+ return s .size ();
15
17
}
16
- }
18
+ }
Original file line number Diff line number Diff line change
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 )
You can’t perform that action at this time.
0 commit comments