From a531962315885c521b7475b70c79cc2b71d370ad Mon Sep 17 00:00:00 2001 From: tom4649 Date: Thu, 28 May 2026 19:41:58 +0900 Subject: [PATCH] 2357. Make Array Zero by Subtracting Equal Amounts --- .../memo.md | 13 ++++++++++++ .../step1.py | 21 +++++++++++++++++++ .../step2.py | 3 +++ 3 files changed, 37 insertions(+) create mode 100644 2357.Make-Array-Zero-by-Subtracting-Equal-Amounts/memo.md create mode 100644 2357.Make-Array-Zero-by-Subtracting-Equal-Amounts/step1.py create mode 100644 2357.Make-Array-Zero-by-Subtracting-Equal-Amounts/step2.py diff --git a/2357.Make-Array-Zero-by-Subtracting-Equal-Amounts/memo.md b/2357.Make-Array-Zero-by-Subtracting-Equal-Amounts/memo.md new file mode 100644 index 0000000..bbefa56 --- /dev/null +++ b/2357.Make-Array-Zero-by-Subtracting-Equal-Amounts/memo.md @@ -0,0 +1,13 @@ +# 2357. Make Array Zero by Subtracting Equal Amounts + +## step1 +手続き的に書いた。計算量O(nlog n) + +## step2 +hintを見た。なるほど。 + +step1を書く途中で気付いたことだが、操作を行ううちに引かれる数を累積すると、配列の要素自身になる。配列の要素がゼロになる場合にはスキップされるが、それは他の要素と重複しているとき。つまり、全ての要素がゼロになるのはゼロでない配列の要素の個数となる。 + + +## step3 +省略 diff --git a/2357.Make-Array-Zero-by-Subtracting-Equal-Amounts/step1.py b/2357.Make-Array-Zero-by-Subtracting-Equal-Amounts/step1.py new file mode 100644 index 0000000..91c695a --- /dev/null +++ b/2357.Make-Array-Zero-by-Subtracting-Equal-Amounts/step1.py @@ -0,0 +1,21 @@ +class Solution: + def minimumOperations(self, nums: list[int]) -> int: + sorted_nums = sorted(nums) + + len_zero = 0 + while len_zero < len(sorted_nums) and sorted_nums[len_zero] == 0: + len_zero += 1 + + if len_zero == len(sorted_nums): + return 0 + + subtracted = 0 + num_operation = 0 + + while subtracted < sorted_nums[-1]: + subtracted = sorted_nums[len_zero] + num_operation += 1 + while len_zero < len(sorted_nums) and sorted_nums[len_zero] <= subtracted: + len_zero += 1 + + return num_operation diff --git a/2357.Make-Array-Zero-by-Subtracting-Equal-Amounts/step2.py b/2357.Make-Array-Zero-by-Subtracting-Equal-Amounts/step2.py new file mode 100644 index 0000000..6ace713 --- /dev/null +++ b/2357.Make-Array-Zero-by-Subtracting-Equal-Amounts/step2.py @@ -0,0 +1,3 @@ +class Solution: + def minimumOperations(self, nums: List[int]) -> int: + return len(set(nums) - {0})