Skip to content

Commit 4602ac7

Browse files
committed
test: 3542 solution
go
1 parent 01c8cff commit 4602ac7

File tree

2 files changed

+23
-9
lines changed

2 files changed

+23
-9
lines changed

problems/problems_3542/solution.go

+17-2
Original file line numberDiff line numberDiff line change
@@ -6,8 +6,23 @@ import (
66
"strings"
77
)
88

9-
func minOperations(nums []int) int {
10-
9+
func minOperations(nums []int) (ans int) {
10+
var minStack []int
11+
for _, num := range nums {
12+
// 左边每个更大的元素都需要一次操作,因为当前为割点
13+
for len(minStack) > 0 && num < minStack[len(minStack)-1] {
14+
minStack = minStack[:len(minStack)-1]
15+
ans++
16+
}
17+
if len(minStack) > 0 && num == minStack[len(minStack)-1] {
18+
continue
19+
}
20+
minStack = append(minStack, num)
21+
}
22+
if minStack[0] == 0 {
23+
ans--
24+
}
25+
return ans + len(minStack)
1126
}
1227

1328
func Solve(inputJsonValues string) interface{} {

problems/problems_3542/solution.py

+6-7
Original file line numberDiff line numberDiff line change
@@ -13,18 +13,17 @@ def minOperations(self, nums: List[int]) -> int:
1313
left_idx = [-1] * n
1414
right_idx = [n] * n
1515
min_stack = []
16+
strict_min_stack = []
1617
for i, num in enumerate(nums):
1718
while min_stack and num < nums[min_stack[-1]]:
1819
idx = min_stack.pop()
1920
right_idx[idx] = i
21+
while strict_min_stack and num <= nums[strict_min_stack[-1]]:
22+
strict_min_stack.pop()
2023
if num == 0:
2124
left_idx[i] = inf
25+
else:
26+
left_idx[i] = strict_min_stack[-1] if strict_min_stack else -1
2227
min_stack.append(i)
23-
min_stack = []
24-
for i in range(n-1, -1, -1):
25-
num = nums[i]
26-
while min_stack and num < nums[min_stack[-1]]:
27-
idx = min_stack.pop()
28-
left_idx[idx] = i
29-
min_stack.append(i)
28+
strict_min_stack.append(i)
3029
return len(set((l, r) for l, r in zip(left_idx, right_idx) if l != inf))

0 commit comments

Comments
 (0)