58
58
59
59
<!-- 这里可写通用的实现逻辑 -->
60
60
61
+ ** 方法一:直接模拟**
62
+
63
+ 我们用变量 ` t ` 记录当前升序子数组的和,用变量 ` ans ` 记录最大的升序子数组和。
64
+
65
+ 遍历数组 ` nums ` :
66
+
67
+ 如果当前元素是数组的第一个元素,或者当前元素大于前一个元素,那么将当前元素加入到当前升序子数组的和,即 ` t += nums[i] ` ,并且更新最大升序子数组和 ` ans = max(ans, t) ` ;否则,当前元素不满足升序子数组的条件,那么将当前升序子数组的和 ` t ` 重置为当前元素,即 ` t = nums[i] ` 。
68
+
69
+ 遍历结束,返回最大升序子数组和 ` ans ` 。
70
+
71
+ 时间复杂度 $O(n)$,空间复杂度 $O(1)$。其中 $n$ 为数组 ` nums ` 的长度。
72
+
61
73
<!-- tabs:start -->
62
74
63
75
### ** Python3**
67
79
``` python
68
80
class Solution :
69
81
def maxAscendingSum (self , nums : List[int ]) -> int :
70
- res, cur = 0 , nums[0 ]
71
- for i in range (1 , len (nums)):
72
- if nums[i] > nums[i - 1 ]:
73
- cur += nums[i]
82
+ ans = t = 0
83
+ for i, v in enumerate (nums):
84
+ if i == 0 or v > nums[i - 1 ]:
85
+ t += v
86
+ ans = max (ans, t)
74
87
else :
75
- res = max (res, cur)
76
- cur = nums[i]
77
- res = max (res, cur)
78
- return res
88
+ t = v
89
+ return ans
79
90
```
80
91
81
92
### ** Java**
@@ -85,58 +96,36 @@ class Solution:
85
96
``` java
86
97
class Solution {
87
98
public int maxAscendingSum (int [] nums ) {
88
- int cur = nums[ 0 ] ;
89
- int res = 0 ;
90
- for ( int i = 1 ; i < nums. length; ++ i ) {
91
- if (nums[i] > nums[i - 1 ]) {
92
- cur += nums[i] ;
99
+ int ans = 0 , t = 0 ;
100
+ for ( int i = 0 ; i < nums . length; ++ i) {
101
+ if ( i == 0 || nums[i] > nums[i - 1 ] ) {
102
+ t += nums[i];
103
+ ans = Math . max(ans, t) ;
93
104
} else {
94
- res = Math . max(res, cur);
95
- cur = nums[i];
105
+ t = nums[i];
96
106
}
97
107
}
98
- res = Math . max(res, cur);
99
- return res;
108
+ return ans;
100
109
}
101
110
}
102
111
```
103
112
104
- ### ** TypeScript**
105
-
106
- ``` ts
107
- function maxAscendingSum(nums : number []): number {
108
- let res = 0 ,
109
- sum = nums [0 ];
110
- for (let i = 1 ; i < nums .length ; ++ i ) {
111
- if (nums [i ] > nums [i - 1 ]) {
112
- sum += nums [i ];
113
- } else {
114
- res = Math .max (res , sum );
115
- sum = nums [i ];
116
- }
117
- }
118
- res = Math .max (res , sum );
119
- return res ;
120
- }
121
- ```
122
-
123
113
### ** C++**
124
114
125
115
``` cpp
126
116
class Solution {
127
117
public:
128
118
int maxAscendingSum(vector<int >& nums) {
129
- int res = 0, cur = nums[ 0] ;
130
- for (int i = 1; i < nums.size(); ++i) {
131
- if (nums[ i] > nums[ i - 1] ) {
132
- cur += nums[ i] ;
119
+ int ans = 0, t = 0;
120
+ for (int i = 0; i < nums.size(); ++i) {
121
+ if (i == 0 || nums[ i] > nums[ i - 1] ) {
122
+ t += nums[ i] ;
123
+ ans = max(ans, t);
133
124
} else {
134
- res = max(res, cur);
135
- cur = nums[ i] ;
125
+ t = nums[ i] ;
136
126
}
137
127
}
138
- res = max(res, cur);
139
- return res;
128
+ return ans;
140
129
}
141
130
};
142
131
```
@@ -145,21 +134,36 @@ public:
145
134
146
135
```go
147
136
func maxAscendingSum(nums []int) int {
148
- res, cur := 0, nums[0]
149
- for i := 1; i < len(nums); i++ {
150
- if nums[i] > nums[i-1] {
151
- cur += nums[i]
152
- } else {
153
- if res < cur {
154
- res = cur
137
+ ans, t := 0, 0
138
+ for i, v := range nums {
139
+ if i == 0 || v > nums[i-1] {
140
+ t += v
141
+ if ans < t {
142
+ ans = t
155
143
}
156
- cur = nums[i]
144
+ } else {
145
+ t = v
157
146
}
158
147
}
159
- if res < cur {
160
- res = cur
161
- }
162
- return res
148
+ return ans
149
+ }
150
+ ```
151
+
152
+ ### ** TypeScript**
153
+
154
+ ``` ts
155
+ function maxAscendingSum(nums : number []): number {
156
+ let ans = 0 ;
157
+ let t = 0 ;
158
+ for (let i = 0 ; i < nums .length ; ++ i ) {
159
+ if (i == 0 || nums [i ] > nums [i - 1 ]) {
160
+ t += nums [i ];
161
+ ans = Math .max (ans , t );
162
+ } else {
163
+ t = nums [i ];
164
+ }
165
+ }
166
+ return ans ;
163
167
}
164
168
```
165
169
0 commit comments