Skip to content

Commit 301121c

Browse files
committed
feat: add solutions to lc problem: No.1526
No.1526.Minimum Number of Increments on Subarrays to Form a Target Array
1 parent f05f20b commit 301121c

File tree

6 files changed

+135
-2
lines changed

6 files changed

+135
-2
lines changed

solution/1500-1599/1526.Minimum Number of Increments on Subarrays to Form a Target Array/README.md

Lines changed: 56 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -63,22 +63,77 @@
6363

6464
<!-- 这里可写通用的实现逻辑 -->
6565

66+
**方法一:动态规划**
67+
68+
我们定义 $f[i]$ 表示得到 $target[0,..i]$ 的最少操作次数,初始时 $f[0] = target[0]$。
69+
70+
对于 $target[i]$,如果 $target[i] \leq target[i-1]$,则 $f[i] = f[i-1]$;否则 $f[i] = f[i-1] + target[i] - target[i-1]$。
71+
72+
最终答案即为 $f[n-1]$。
73+
74+
我们注意到 $f[i]$ 只与 $f[i-1]$ 有关,因此可以只用一个变量来维护操作次数。
75+
76+
时间复杂度 $O(n)$,空间复杂度 $O(1)$。其中 $n$ 为数组 $target$ 的长度。
77+
6678
<!-- tabs:start -->
6779

6880
### **Python3**
6981

7082
<!-- 这里可写当前语言的特殊实现逻辑 -->
7183

7284
```python
73-
85+
class Solution:
86+
def minNumberOperations(self, target: List[int]) -> int:
87+
return target[0] + sum(max(0, b - a) for a, b in pairwise(target))
7488
```
7589

7690
### **Java**
7791

7892
<!-- 这里可写当前语言的特殊实现逻辑 -->
7993

8094
```java
95+
class Solution {
96+
public int minNumberOperations(int[] target) {
97+
int f = target[0];
98+
for (int i = 1; i < target.length; ++i) {
99+
if (target[i] > target[i - 1]) {
100+
f += target[i] - target[i - 1];
101+
}
102+
}
103+
return f;
104+
}
105+
}
106+
```
107+
108+
### **C++**
109+
110+
```cpp
111+
class Solution {
112+
public:
113+
int minNumberOperations(vector<int>& target) {
114+
int f = target[0];
115+
for (int i = 1; i < target.size(); ++i) {
116+
if (target[i] > target[i - 1]) {
117+
f += target[i] - target[i - 1];
118+
}
119+
}
120+
return f;
121+
}
122+
};
123+
```
81124
125+
### **Go**
126+
127+
```go
128+
func minNumberOperations(target []int) int {
129+
f := target[0]
130+
for i, x := range target[1:] {
131+
if x > target[i] {
132+
f += x - target[i]
133+
}
134+
}
135+
return f
136+
}
82137
```
83138

84139
### **...**

solution/1500-1599/1526.Minimum Number of Increments on Subarrays to Form a Target Array/README_EN.md

Lines changed: 44 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -56,13 +56,56 @@
5656
### **Python3**
5757

5858
```python
59-
59+
class Solution:
60+
def minNumberOperations(self, target: List[int]) -> int:
61+
return target[0] + sum(max(0, b - a) for a, b in pairwise(target))
6062
```
6163

6264
### **Java**
6365

6466
```java
67+
class Solution {
68+
public int minNumberOperations(int[] target) {
69+
int f = target[0];
70+
for (int i = 1; i < target.length; ++i) {
71+
if (target[i] > target[i - 1]) {
72+
f += target[i] - target[i - 1];
73+
}
74+
}
75+
return f;
76+
}
77+
}
78+
```
79+
80+
### **C++**
81+
82+
```cpp
83+
class Solution {
84+
public:
85+
int minNumberOperations(vector<int>& target) {
86+
int f = target[0];
87+
for (int i = 1; i < target.size(); ++i) {
88+
if (target[i] > target[i - 1]) {
89+
f += target[i] - target[i - 1];
90+
}
91+
}
92+
return f;
93+
}
94+
};
95+
```
6596
97+
### **Go**
98+
99+
```go
100+
func minNumberOperations(target []int) int {
101+
f := target[0]
102+
for i, x := range target[1:] {
103+
if x > target[i] {
104+
f += x - target[i]
105+
}
106+
}
107+
return f
108+
}
66109
```
67110

68111
### **...**
Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,12 @@
1+
class Solution {
2+
public:
3+
int minNumberOperations(vector<int>& target) {
4+
int f = target[0];
5+
for (int i = 1; i < target.size(); ++i) {
6+
if (target[i] > target[i - 1]) {
7+
f += target[i] - target[i - 1];
8+
}
9+
}
10+
return f;
11+
}
12+
};
Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,9 @@
1+
func minNumberOperations(target []int) int {
2+
f := target[0]
3+
for i, x := range target[1:] {
4+
if x > target[i] {
5+
f += x - target[i]
6+
}
7+
}
8+
return f
9+
}
Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,11 @@
1+
class Solution {
2+
public int minNumberOperations(int[] target) {
3+
int f = target[0];
4+
for (int i = 1; i < target.length; ++i) {
5+
if (target[i] > target[i - 1]) {
6+
f += target[i] - target[i - 1];
7+
}
8+
}
9+
return f;
10+
}
11+
}
Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,3 @@
1+
class Solution:
2+
def minNumberOperations(self, target: List[int]) -> int:
3+
return target[0] + sum(max(0, b - a) for a, b in pairwise(target))

0 commit comments

Comments
 (0)