File tree Expand file tree Collapse file tree 6 files changed +135
-2
lines changed
solution/1500-1599/1526.Minimum Number of Increments on Subarrays to Form a Target Array Expand file tree Collapse file tree 6 files changed +135
-2
lines changed Original file line number Diff line number Diff line change 63
63
64
64
<!-- 这里可写通用的实现逻辑 -->
65
65
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
+
66
78
<!-- tabs:start -->
67
79
68
80
### ** Python3**
69
81
70
82
<!-- 这里可写当前语言的特殊实现逻辑 -->
71
83
72
84
``` 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))
74
88
```
75
89
76
90
### ** Java**
77
91
78
92
<!-- 这里可写当前语言的特殊实现逻辑 -->
79
93
80
94
``` 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
+ ```
81
124
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
+ }
82
137
```
83
138
84
139
### ** ...**
Original file line number Diff line number Diff line change 56
56
### ** Python3**
57
57
58
58
``` 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))
60
62
```
61
63
62
64
### ** Java**
63
65
64
66
``` 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
+ ```
65
96
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
+ }
66
109
```
67
110
68
111
### ** ...**
Original file line number Diff line number Diff line change
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
+ };
Original file line number Diff line number Diff line change
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
+ }
Original file line number Diff line number Diff line change
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
+ }
Original file line number Diff line number Diff line change
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 ))
You can’t perform that action at this time.
0 commit comments