From bda2a60aa09a458d13052fbfb67b64a0ad577617 Mon Sep 17 00:00:00 2001 From: Roytangrb <25113108+Roytangrb@users.noreply.github.com> Date: Thu, 4 Jan 2024 14:42:52 -0500 Subject: [PATCH] feat: add lc 2772 greedy sliding window --- README.org | 1 + ...o-make-all-array-elements-equal-to-zero.py | 20 +++++++++++++++++++ 2 files changed, 21 insertions(+) create mode 100644 leetcode/python/2772-apply-operations-to-make-all-array-elements-equal-to-zero.py diff --git a/README.org b/README.org index 9bb8f0a..9a139ce 100644 --- a/README.org +++ b/README.org @@ -316,6 +316,7 @@ - [[https://leetcode.com/problems/stone-game-iii/][Stone Game III]] ([[file:leetcode/python/1406-stone-game-iii.py][code]]) - [[https://leetcode.com/problems/string-compression-ii/][String Compression II]] ([[file:leetcode/python/1531-string-compression-ii.py][code]]) - Greedy + - [[https://leetcode.com/problems/apply-operations-to-make-all-array-elements-equal-to-zero/][Apply Operations to Make All Array Elements Equal to Zero]] ([[file:leetcode/python/2772-apply-operations-to-make-all-array-elements-equal-to-zero.py][code]]) - [[https://leetcode.com/problems/break-a-palindrome/][Break a Palindrome]] ([[file:leetcode/python/1328-break-a-palindrome.py][code]]) - [[https://leetcode.com/problems/integer-to-roman/][Integer to Roman]] ([[file:leetcode/python/12-integer-to-roman.py][code]]) - [[https://leetcode.com/problems/jump-game-ii/][Jump Game II]] ([[file:leetcode/python/45-jump-game-ii.py][code]]) diff --git a/leetcode/python/2772-apply-operations-to-make-all-array-elements-equal-to-zero.py b/leetcode/python/2772-apply-operations-to-make-all-array-elements-equal-to-zero.py new file mode 100644 index 0000000..fbbbffe --- /dev/null +++ b/leetcode/python/2772-apply-operations-to-make-all-array-elements-equal-to-zero.py @@ -0,0 +1,20 @@ +# Author: RT +# Date: 2023-07-09T05:56:13.462Z +# URL: https://leetcode.com/problems/apply-operations-to-make-all-array-elements-equal-to-zero/ + + +class Solution: + def checkArray(self, nums: list[int], k: int) -> bool: + # accrued value need to be deleted from window ending at current index + # as we slide the window from left to right + curr = 0 + n = len(nums) + for i in range(n): + if curr > nums[i]: + return False + + nums[i], curr = nums[i] - curr, nums[i] + if i + 1 >= k: + curr -= nums[i - k + 1] + + return curr == 0