Skip to content

Commit dfb2b6e

Browse files
Add solutions for Minimum Operations to Make Array Elements Zero in C++, Go, Python, Rust, and TypeScript
1 parent 5cc42e8 commit dfb2b6e

File tree

5 files changed

+112
-0
lines changed

5 files changed

+112
-0
lines changed
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: 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: 26 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,26 @@
1+
impl Solution {
2+
pub fn min_operations(queries: Vec<Vec<i32>>) -> i64 {
3+
let f = |x: i64| -> i64 {
4+
let mut res: i64 = 0;
5+
let mut p: i64 = 1;
6+
let mut i: i64 = 1;
7+
while p <= x {
8+
let cnt = std::cmp::min(p * 4 - 1, x) - p + 1;
9+
res += cnt * i;
10+
i += 1;
11+
p *= 4;
12+
}
13+
res
14+
};
15+
16+
let mut ans: i64 = 0;
17+
for q in queries {
18+
let l = q[0] as i64;
19+
let r = q[1] as i64;
20+
let s = f(r) - f(l - 1);
21+
let mx = f(r) - f(r - 1);
22+
ans += std::cmp::max((s + 1) / 2, mx);
23+
}
24+
ans
25+
}
26+
}
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)