diff --git a/leetcode/3401-3500/3495.Minimum-Operations-to-Make-Array-Elements-Zero/README.md b/leetcode/3401-3500/3495.Minimum-Operations-to-Make-Array-Elements-Zero/README.md index f816cddd..936fa5de 100755 --- a/leetcode/3401-3500/3495.Minimum-Operations-to-Make-Array-Elements-Zero/README.md +++ b/leetcode/3401-3500/3495.Minimum-Operations-to-Make-Array-Elements-Zero/README.md @@ -1,28 +1,57 @@ # [3495.Minimum Operations to Make Array Elements Zero][title] -> [!WARNING|style:flat] -> This question is temporarily unanswered if you have good ideas. Welcome to [Create Pull Request PR](https://github.com/kylesliu/awesome-golang-algorithm) - ## Description +You are given a 2D array `queries`, where `queries[i]` is of the form `[l, r]`. Each `queries[i]` defines an array of integers `nums` consisting of elements ranging from `l` to `r`, both **inclusive**. + +In one operation, you can: + +- Select two integers `a` and `b` from the array. +- Replace them with `floor(a / 4)` and `floor(b / 4)`. + +Your task is to determine the **minimum** number of operations required to reduce all elements of the array to zero for each query. Return the sum of the results for all queries. **Example 1:** ``` -Input: a = "11", b = "1" -Output: "100" -``` +Input: queries = [[1,2],[2,4]] + +Output: 3 + +Explanation: -## 题意 -> ... +For queries[0]: -## 题解 +The initial array is nums = [1, 2]. +In the first operation, select nums[0] and nums[1]. The array becomes [0, 0]. +The minimum number of operations required is 1. +For queries[1]: -### 思路1 -> ... -Minimum Operations to Make Array Elements Zero -```go +The initial array is nums = [2, 3, 4]. +In the first operation, select nums[0] and nums[2]. The array becomes [0, 3, 1]. +In the second operation, select nums[1] and nums[2]. The array becomes [0, 0, 0]. +The minimum number of operations required is 2. +The output is 1 + 2 = 3. ``` +**Example 2:** + +``` +Input: queries = [[2,6]] + +Output: 4 + +Explanation: + +For queries[0]: + +The initial array is nums = [2, 3, 4, 5, 6]. +In the first operation, select nums[0] and nums[3]. The array becomes [0, 3, 4, 1, 6]. +In the second operation, select nums[2] and nums[4]. The array becomes [0, 3, 1, 1, 1]. +In the third operation, select nums[1] and nums[2]. The array becomes [0, 0, 0, 1, 1]. +In the fourth operation, select nums[3] and nums[4]. The array becomes [0, 0, 0, 0, 0]. +The minimum number of operations required is 4. +The output is 4. +``` ## 结语 diff --git a/leetcode/3401-3500/3495.Minimum-Operations-to-Make-Array-Elements-Zero/Solution.go b/leetcode/3401-3500/3495.Minimum-Operations-to-Make-Array-Elements-Zero/Solution.go index d115ccf5..ebdec751 100644 --- a/leetcode/3401-3500/3495.Minimum-Operations-to-Make-Array-Elements-Zero/Solution.go +++ b/leetcode/3401-3500/3495.Minimum-Operations-to-Make-Array-Elements-Zero/Solution.go @@ -1,5 +1,28 @@ package Solution -func Solution(x bool) bool { - return x +func get(num int) int64 { + var cnt int64 + i := 1 + base := 1 + + for base <= num { + end := base*2 - 1 + if end > num { + end = num + } + cnt += int64((i+1)/2) * int64(end-base+1) + i++ + base *= 2 + } + return cnt +} + +func Solution(queries [][]int) int64 { + var res int64 + for _, q := range queries { + count1 := get(q[1]) + count2 := get(q[0] - 1) + res += (count1 - count2 + 1) / 2 + } + return res } diff --git a/leetcode/3401-3500/3495.Minimum-Operations-to-Make-Array-Elements-Zero/Solution_test.go b/leetcode/3401-3500/3495.Minimum-Operations-to-Make-Array-Elements-Zero/Solution_test.go index 14ff50eb..a73fe6d0 100644 --- a/leetcode/3401-3500/3495.Minimum-Operations-to-Make-Array-Elements-Zero/Solution_test.go +++ b/leetcode/3401-3500/3495.Minimum-Operations-to-Make-Array-Elements-Zero/Solution_test.go @@ -10,12 +10,11 @@ func TestSolution(t *testing.T) { // 测试用例 cases := []struct { name string - inputs bool - expect bool + inputs [][]int + expect int64 }{ - {"TestCase", true, true}, - {"TestCase", true, true}, - {"TestCase", false, false}, + {"TestCase1", [][]int{{1, 2}, {2, 4}}, 3}, + {"TestCase2", [][]int{{2, 6}}, 4}, } // 开始测试 @@ -30,10 +29,10 @@ func TestSolution(t *testing.T) { } } -// 压力测试 +// 压力测试 func BenchmarkSolution(b *testing.B) { } -// 使用案列 +// 使用案列 func ExampleSolution() { }