Skip to content

Commit 7c83d94

Browse files
committed
feat: add solutions to lc problem: No.3495
1 parent c151b55 commit 7c83d94

File tree

7 files changed

+341
-6
lines changed

7 files changed

+341
-6
lines changed

solution/3400-3499/3495.Minimum Operations to Make Array Elements Zero/README.md

Lines changed: 115 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -110,25 +110,137 @@ tags:
110110
#### Python3
111111

112112
```python
113-
113+
class Solution:
114+
def minOperations(self, queries: List[List[int]]) -> int:
115+
def f(x: int) -> int:
116+
res = 0
117+
p = i = 1
118+
while p <= x:
119+
cnt = min(p * 4 - 1, x) - p + 1
120+
res += cnt * i
121+
i += 1
122+
p *= 4
123+
return res
124+
125+
ans = 0
126+
for l, r in queries:
127+
s = f(r) - f(l - 1)
128+
mx = f(r) - f(r - 1)
129+
ans += max((s + 1) // 2, mx)
130+
return ans
114131
```
115132

116133
#### Java
117134

118135
```java
119-
136+
class Solution {
137+
public long minOperations(int[][] queries) {
138+
long ans = 0;
139+
for (int[] q : queries) {
140+
int l = q[0], r = q[1];
141+
long s = f(r) - f(l - 1);
142+
long mx = f(r) - f(r - 1);
143+
ans += Math.max((s + 1) / 2, mx);
144+
}
145+
return ans;
146+
}
147+
148+
private long f(long x) {
149+
long res = 0;
150+
long p = 1;
151+
int i = 1;
152+
while (p <= x) {
153+
long cnt = Math.min(p * 4 - 1, x) - p + 1;
154+
res += cnt * i;
155+
i++;
156+
p *= 4;
157+
}
158+
return res;
159+
}
160+
}
120161
```
121162

122163
#### C++
123164

124165
```cpp
125-
166+
class Solution {
167+
public:
168+
long long minOperations(vector<vector<int>>& queries) {
169+
auto f = [&](long long x) {
170+
long long res = 0;
171+
long long p = 1;
172+
int i = 1;
173+
while (p <= x) {
174+
long long cnt = min(p * 4 - 1, x) - p + 1;
175+
res += cnt * i;
176+
i++;
177+
p *= 4;
178+
}
179+
return res;
180+
};
181+
182+
long long ans = 0;
183+
for (auto& q : queries) {
184+
int l = q[0], r = q[1];
185+
long long s = f(r) - f(l - 1);
186+
long long mx = f(r) - f(r - 1);
187+
ans += max((s + 1) / 2, mx);
188+
}
189+
return ans;
190+
}
191+
};
126192
```
127193

128194
#### Go
129195

130196
```go
197+
func minOperations(queries [][]int) (ans int64) {
198+
f := func(x int64) (res int64) {
199+
var p int64 = 1
200+
i := int64(1)
201+
for p <= x {
202+
cnt := min(p*4-1, x) - p + 1
203+
res += cnt * i
204+
i++
205+
p *= 4
206+
}
207+
return
208+
}
209+
for _, q := range queries {
210+
l, r := int64(q[0]), int64(q[1])
211+
s := f(r) - f(l-1)
212+
mx := f(r) - f(r-1)
213+
ans += max((s+1)/2, mx)
214+
}
215+
return
216+
}
217+
```
131218

219+
#### TypeScript
220+
221+
```ts
222+
function minOperations(queries: number[][]): number {
223+
const f = (x: number): number => {
224+
let res = 0;
225+
let p = 1;
226+
let i = 1;
227+
while (p <= x) {
228+
const cnt = Math.min(p * 4 - 1, x) - p + 1;
229+
res += cnt * i;
230+
i++;
231+
p *= 4;
232+
}
233+
return res;
234+
};
235+
236+
let ans = 0;
237+
for (const [l, r] of queries) {
238+
const s = f(r) - f(l - 1);
239+
const mx = f(r) - f(r - 1);
240+
ans += Math.max(Math.ceil(s / 2), mx);
241+
}
242+
return ans;
243+
}
132244
```
133245

134246
<!-- tabs:end -->

solution/3400-3499/3495.Minimum Operations to Make Array Elements Zero/README_EN.md

Lines changed: 115 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -107,25 +107,137 @@ tags:
107107
#### Python3
108108

109109
```python
110-
110+
class Solution:
111+
def minOperations(self, queries: List[List[int]]) -> int:
112+
def f(x: int) -> int:
113+
res = 0
114+
p = i = 1
115+
while p <= x:
116+
cnt = min(p * 4 - 1, x) - p + 1
117+
res += cnt * i
118+
i += 1
119+
p *= 4
120+
return res
121+
122+
ans = 0
123+
for l, r in queries:
124+
s = f(r) - f(l - 1)
125+
mx = f(r) - f(r - 1)
126+
ans += max((s + 1) // 2, mx)
127+
return ans
111128
```
112129

113130
#### Java
114131

115132
```java
116-
133+
class Solution {
134+
public long minOperations(int[][] queries) {
135+
long ans = 0;
136+
for (int[] q : queries) {
137+
int l = q[0], r = q[1];
138+
long s = f(r) - f(l - 1);
139+
long mx = f(r) - f(r - 1);
140+
ans += Math.max((s + 1) / 2, mx);
141+
}
142+
return ans;
143+
}
144+
145+
private long f(long x) {
146+
long res = 0;
147+
long p = 1;
148+
int i = 1;
149+
while (p <= x) {
150+
long cnt = Math.min(p * 4 - 1, x) - p + 1;
151+
res += cnt * i;
152+
i++;
153+
p *= 4;
154+
}
155+
return res;
156+
}
157+
}
117158
```
118159

119160
#### C++
120161

121162
```cpp
122-
163+
class Solution {
164+
public:
165+
long long minOperations(vector<vector<int>>& queries) {
166+
auto f = [&](long long x) {
167+
long long res = 0;
168+
long long p = 1;
169+
int i = 1;
170+
while (p <= x) {
171+
long long cnt = min(p * 4 - 1, x) - p + 1;
172+
res += cnt * i;
173+
i++;
174+
p *= 4;
175+
}
176+
return res;
177+
};
178+
179+
long long ans = 0;
180+
for (auto& q : queries) {
181+
int l = q[0], r = q[1];
182+
long long s = f(r) - f(l - 1);
183+
long long mx = f(r) - f(r - 1);
184+
ans += max((s + 1) / 2, mx);
185+
}
186+
return ans;
187+
}
188+
};
123189
```
124190

125191
#### Go
126192

127193
```go
194+
func minOperations(queries [][]int) (ans int64) {
195+
f := func(x int64) (res int64) {
196+
var p int64 = 1
197+
i := int64(1)
198+
for p <= x {
199+
cnt := min(p*4-1, x) - p + 1
200+
res += cnt * i
201+
i++
202+
p *= 4
203+
}
204+
return
205+
}
206+
for _, q := range queries {
207+
l, r := int64(q[0]), int64(q[1])
208+
s := f(r) - f(l-1)
209+
mx := f(r) - f(r-1)
210+
ans += max((s+1)/2, mx)
211+
}
212+
return
213+
}
214+
```
128215

216+
#### TypeScript
217+
218+
```ts
219+
function minOperations(queries: number[][]): number {
220+
const f = (x: number): number => {
221+
let res = 0;
222+
let p = 1;
223+
let i = 1;
224+
while (p <= x) {
225+
const cnt = Math.min(p * 4 - 1, x) - p + 1;
226+
res += cnt * i;
227+
i++;
228+
p *= 4;
229+
}
230+
return res;
231+
};
232+
233+
let ans = 0;
234+
for (const [l, r] of queries) {
235+
const s = f(r) - f(l - 1);
236+
const mx = f(r) - f(r - 1);
237+
ans += Math.max(Math.ceil(s / 2), mx);
238+
}
239+
return ans;
240+
}
129241
```
130242

131243
<!-- tabs:end -->
Lines changed: 26 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,26 @@
1+
class Solution {
2+
public:
3+
long long minOperations(vector<vector<int>>& queries) {
4+
auto f = [&](long long x) {
5+
long long res = 0;
6+
long long p = 1;
7+
int i = 1;
8+
while (p <= x) {
9+
long long cnt = min(p * 4 - 1, x) - p + 1;
10+
res += cnt * i;
11+
i++;
12+
p *= 4;
13+
}
14+
return res;
15+
};
16+
17+
long long ans = 0;
18+
for (auto& q : queries) {
19+
int l = q[0], r = q[1];
20+
long long s = f(r) - f(l - 1);
21+
long long mx = f(r) - f(r - 1);
22+
ans += max((s + 1) / 2, mx);
23+
}
24+
return ans;
25+
}
26+
};
Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,20 @@
1+
func minOperations(queries [][]int) (ans int64) {
2+
f := func(x int64) (res int64) {
3+
var p int64 = 1
4+
i := int64(1)
5+
for p <= x {
6+
cnt := min(p*4-1, x) - p + 1
7+
res += cnt * i
8+
i++
9+
p *= 4
10+
}
11+
return
12+
}
13+
for _, q := range queries {
14+
l, r := int64(q[0]), int64(q[1])
15+
s := f(r) - f(l-1)
16+
mx := f(r) - f(r-1)
17+
ans += max((s+1)/2, mx)
18+
}
19+
return
20+
}
Lines changed: 25 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,25 @@
1+
class Solution {
2+
public long minOperations(int[][] queries) {
3+
long ans = 0;
4+
for (int[] q : queries) {
5+
int l = q[0], r = q[1];
6+
long s = f(r) - f(l - 1);
7+
long mx = f(r) - f(r - 1);
8+
ans += Math.max((s + 1) / 2, mx);
9+
}
10+
return ans;
11+
}
12+
13+
private long f(long x) {
14+
long res = 0;
15+
long p = 1;
16+
int i = 1;
17+
while (p <= x) {
18+
long cnt = Math.min(p * 4 - 1, x) - p + 1;
19+
res += cnt * i;
20+
i++;
21+
p *= 4;
22+
}
23+
return res;
24+
}
25+
}
Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,18 @@
1+
class Solution:
2+
def minOperations(self, queries: List[List[int]]) -> int:
3+
def f(x: int) -> int:
4+
res = 0
5+
p = i = 1
6+
while p <= x:
7+
cnt = min(p * 4 - 1, x) - p + 1
8+
res += cnt * i
9+
i += 1
10+
p *= 4
11+
return res
12+
13+
ans = 0
14+
for l, r in queries:
15+
s = f(r) - f(l - 1)
16+
mx = f(r) - f(r - 1)
17+
ans += max((s + 1) // 2, mx)
18+
return ans
Lines changed: 22 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,22 @@
1+
function minOperations(queries: number[][]): number {
2+
const f = (x: number): number => {
3+
let res = 0;
4+
let p = 1;
5+
let i = 1;
6+
while (p <= x) {
7+
const cnt = Math.min(p * 4 - 1, x) - p + 1;
8+
res += cnt * i;
9+
i++;
10+
p *= 4;
11+
}
12+
return res;
13+
};
14+
15+
let ans = 0;
16+
for (const [l, r] of queries) {
17+
const s = f(r) - f(l - 1);
18+
const mx = f(r) - f(r - 1);
19+
ans += Math.max(Math.ceil(s / 2), mx);
20+
}
21+
return ans;
22+
}

0 commit comments

Comments
 (0)