diff --git a/solution/3500-3599/3511.Make a Positive Array/README.md b/solution/3500-3599/3511.Make a Positive Array/README.md index 2cf0205532104..14ccf809179a3 100644 --- a/solution/3500-3599/3511.Make a Positive Array/README.md +++ b/solution/3500-3599/3511.Make a Positive Array/README.md @@ -119,25 +119,110 @@ edit_url: https://github.com/doocs/leetcode/edit/main/solution/3500-3599/3511.Ma #### Python3 ```python - +class Solution: + def makeArrayPositive(self, nums: List[int]) -> int: + l = -1 + ans = pre_mx = s = 0 + for r, x in enumerate(nums): + s += x + if r - l > 2 and s <= pre_mx: + ans += 1 + l = r + pre_mx = s = 0 + elif r - l >= 2: + pre_mx = max(pre_mx, s - x - nums[r - 1]) + return ans ``` #### Java ```java - +class Solution { + public int makeArrayPositive(int[] nums) { + int ans = 0; + long preMx = 0, s = 0; + for (int l = -1, r = 0; r < nums.length; r++) { + int x = nums[r]; + s += x; + if (r - l > 2 && s <= preMx) { + ans++; + l = r; + preMx = s = 0; + } else if (r - l >= 2) { + preMx = Math.max(preMx, s - x - nums[r - 1]); + } + } + return ans; + } +} ``` #### C++ ```cpp - +class Solution { +public: + int makeArrayPositive(vector& nums) { + int ans = 0; + long long preMx = 0, s = 0; + for (int l = -1, r = 0; r < nums.size(); r++) { + int x = nums[r]; + s += x; + if (r - l > 2 && s <= preMx) { + ans++; + l = r; + preMx = s = 0; + } else if (r - l >= 2) { + preMx = max(preMx, s - x - nums[r - 1]); + } + } + return ans; + } +}; ``` #### Go ```go +func makeArrayPositive(nums []int) (ans int) { + l := -1 + preMx := 0 + s := 0 + for r, x := range nums { + s += x + if r-l > 2 && s <= preMx { + ans++ + l = r + preMx = 0 + s = 0 + } else if r-l >= 2 { + preMx = max(preMx, s-x-nums[r-1]) + } + } + return +} +``` +#### TypeScript + +```ts +function makeArrayPositive(nums: number[]): number { + let l = -1; + let [ans, preMx, s] = [0, 0, 0]; + for (let r = 0; r < nums.length; r++) { + const x = nums[r]; + s += x; + if (r - l > 2 && s <= preMx) { + ans++; + l = r; + preMx = 0; + s = 0; + } else if (r - l >= 2) { + preMx = Math.max(preMx, s - x - nums[r - 1]); + } + } + return ans; +} ``` diff --git a/solution/3500-3599/3511.Make a Positive Array/README_EN.md b/solution/3500-3599/3511.Make a Positive Array/README_EN.md index 128f81a7eaf9f..e748a086e652e 100644 --- a/solution/3500-3599/3511.Make a Positive Array/README_EN.md +++ b/solution/3500-3599/3511.Make a Positive Array/README_EN.md @@ -117,25 +117,110 @@ edit_url: https://github.com/doocs/leetcode/edit/main/solution/3500-3599/3511.Ma #### Python3 ```python - +class Solution: + def makeArrayPositive(self, nums: List[int]) -> int: + l = -1 + ans = pre_mx = s = 0 + for r, x in enumerate(nums): + s += x + if r - l > 2 and s <= pre_mx: + ans += 1 + l = r + pre_mx = s = 0 + elif r - l >= 2: + pre_mx = max(pre_mx, s - x - nums[r - 1]) + return ans ``` #### Java ```java - +class Solution { + public int makeArrayPositive(int[] nums) { + int ans = 0; + long preMx = 0, s = 0; + for (int l = -1, r = 0; r < nums.length; r++) { + int x = nums[r]; + s += x; + if (r - l > 2 && s <= preMx) { + ans++; + l = r; + preMx = s = 0; + } else if (r - l >= 2) { + preMx = Math.max(preMx, s - x - nums[r - 1]); + } + } + return ans; + } +} ``` #### C++ ```cpp - +class Solution { +public: + int makeArrayPositive(vector& nums) { + int ans = 0; + long long preMx = 0, s = 0; + for (int l = -1, r = 0; r < nums.size(); r++) { + int x = nums[r]; + s += x; + if (r - l > 2 && s <= preMx) { + ans++; + l = r; + preMx = s = 0; + } else if (r - l >= 2) { + preMx = max(preMx, s - x - nums[r - 1]); + } + } + return ans; + } +}; ``` #### Go ```go +func makeArrayPositive(nums []int) (ans int) { + l := -1 + preMx := 0 + s := 0 + for r, x := range nums { + s += x + if r-l > 2 && s <= preMx { + ans++ + l = r + preMx = 0 + s = 0 + } else if r-l >= 2 { + preMx = max(preMx, s-x-nums[r-1]) + } + } + return +} +``` +#### TypeScript + +```ts +function makeArrayPositive(nums: number[]): number { + let l = -1; + let [ans, preMx, s] = [0, 0, 0]; + for (let r = 0; r < nums.length; r++) { + const x = nums[r]; + s += x; + if (r - l > 2 && s <= preMx) { + ans++; + l = r; + preMx = 0; + s = 0; + } else if (r - l >= 2) { + preMx = Math.max(preMx, s - x - nums[r - 1]); + } + } + return ans; +} ``` diff --git a/solution/3500-3599/3511.Make a Positive Array/Solution.cpp b/solution/3500-3599/3511.Make a Positive Array/Solution.cpp new file mode 100644 index 0000000000000..a6a1fb4cb96c6 --- /dev/null +++ b/solution/3500-3599/3511.Make a Positive Array/Solution.cpp @@ -0,0 +1,19 @@ +class Solution { +public: + int makeArrayPositive(vector& nums) { + int ans = 0; + long long preMx = 0, s = 0; + for (int l = -1, r = 0; r < nums.size(); r++) { + int x = nums[r]; + s += x; + if (r - l > 2 && s <= preMx) { + ans++; + l = r; + preMx = s = 0; + } else if (r - l >= 2) { + preMx = max(preMx, s - x - nums[r - 1]); + } + } + return ans; + } +}; \ No newline at end of file diff --git a/solution/3500-3599/3511.Make a Positive Array/Solution.go b/solution/3500-3599/3511.Make a Positive Array/Solution.go new file mode 100644 index 0000000000000..db14f1763cb77 --- /dev/null +++ b/solution/3500-3599/3511.Make a Positive Array/Solution.go @@ -0,0 +1,17 @@ +func makeArrayPositive(nums []int) (ans int) { + l := -1 + preMx := 0 + s := 0 + for r, x := range nums { + s += x + if r-l > 2 && s <= preMx { + ans++ + l = r + preMx = 0 + s = 0 + } else if r-l >= 2 { + preMx = max(preMx, s-x-nums[r-1]) + } + } + return +} \ No newline at end of file diff --git a/solution/3500-3599/3511.Make a Positive Array/Solution.java b/solution/3500-3599/3511.Make a Positive Array/Solution.java new file mode 100644 index 0000000000000..34dd9be4552ed --- /dev/null +++ b/solution/3500-3599/3511.Make a Positive Array/Solution.java @@ -0,0 +1,18 @@ +class Solution { + public int makeArrayPositive(int[] nums) { + int ans = 0; + long preMx = 0, s = 0; + for (int l = -1, r = 0; r < nums.length; r++) { + int x = nums[r]; + s += x; + if (r - l > 2 && s <= preMx) { + ans++; + l = r; + preMx = s = 0; + } else if (r - l >= 2) { + preMx = Math.max(preMx, s - x - nums[r - 1]); + } + } + return ans; + } +} diff --git a/solution/3500-3599/3511.Make a Positive Array/Solution.py b/solution/3500-3599/3511.Make a Positive Array/Solution.py new file mode 100644 index 0000000000000..d6ce925c52502 --- /dev/null +++ b/solution/3500-3599/3511.Make a Positive Array/Solution.py @@ -0,0 +1,13 @@ +class Solution: + def makeArrayPositive(self, nums: List[int]) -> int: + l = -1 + ans = pre_mx = s = 0 + for r, x in enumerate(nums): + s += x + if r - l > 2 and s <= pre_mx: + ans += 1 + l = r + pre_mx = s = 0 + elif r - l >= 2: + pre_mx = max(pre_mx, s - x - nums[r - 1]) + return ans diff --git a/solution/3500-3599/3511.Make a Positive Array/Solution.ts b/solution/3500-3599/3511.Make a Positive Array/Solution.ts new file mode 100644 index 0000000000000..36bcbb6a6a20e --- /dev/null +++ b/solution/3500-3599/3511.Make a Positive Array/Solution.ts @@ -0,0 +1,17 @@ +function makeArrayPositive(nums: number[]): number { + let l = -1; + let [ans, preMx, s] = [0, 0, 0]; + for (let r = 0; r < nums.length; r++) { + const x = nums[r]; + s += x; + if (r - l > 2 && s <= preMx) { + ans++; + l = r; + preMx = 0; + s = 0; + } else if (r - l >= 2) { + preMx = Math.max(preMx, s - x - nums[r - 1]); + } + } + return ans; +}