@@ -58,25 +58,121 @@ Because the given array is not non-decreasing, the maximum<!-- notionvc: 3447a50
58
58
### ** Python3**
59
59
60
60
``` python
61
-
61
+ class Solution :
62
+ def findMaximumLength (self , nums : List[int ]) -> int :
63
+ n = len (nums)
64
+ s = list (accumulate(nums, initial = 0 ))
65
+ f = [0 ] * (n + 1 )
66
+ pre = [0 ] * (n + 2 )
67
+ for i in range (1 , n + 1 ):
68
+ pre[i] = max (pre[i], pre[i - 1 ])
69
+ f[i] = f[pre[i]] + 1
70
+ j = bisect_left(s, s[i] * 2 - s[pre[i]])
71
+ pre[j] = i
72
+ return f[n]
62
73
```
63
74
64
75
### ** Java**
65
76
66
77
``` java
67
-
78
+ class Solution {
79
+ public int findMaximumLength (int [] nums ) {
80
+ int n = nums. length;
81
+ long [] s = new long [n + 1 ];
82
+ for (int i = 0 ; i < n; ++ i) {
83
+ s[i + 1 ] = s[i] + nums[i];
84
+ }
85
+ int [] f = new int [n + 1 ];
86
+ int [] pre = new int [n + 2 ];
87
+ for (int i = 1 ; i <= n; ++ i) {
88
+ pre[i] = Math . max(pre[i], pre[i - 1 ]);
89
+ f[i] = f[pre[i]] + 1 ;
90
+ int j = Arrays . binarySearch(s, s[i] * 2 - s[pre[i]]);
91
+ pre[j < 0 ? - j - 1 : j] = i;
92
+ }
93
+ return f[n];
94
+ }
95
+ }
68
96
```
69
97
70
98
### ** C++**
71
99
72
100
``` cpp
73
-
101
+ class Solution {
102
+ public:
103
+ int findMaximumLength(vector<int >& nums) {
104
+ int n = nums.size();
105
+ int f[ n + 1] ;
106
+ int pre[ n + 2] ;
107
+ long long s[ n + 1] ;
108
+ for (int i = 0; i < n; ++i) {
109
+ s[ i + 1] = s[ i] + nums[ i] ;
110
+ }
111
+ memset(f, 0, sizeof(f));
112
+ memset(pre, 0, sizeof(pre));
113
+ for (int i = 1; i <= n; ++i) {
114
+ pre[ i] = max(pre[ i] , pre[ i - 1] );
115
+ f[ i] = f[ pre[ i]] + 1;
116
+ int j = lower_bound(s, s + n + 1, s[ i] * 2 - s[ pre[ i]] ) - s;
117
+ pre[ j] = i;
118
+ }
119
+ return f[ n] ;
120
+ }
121
+ };
74
122
```
75
123
76
124
### **Go**
77
125
78
126
```go
127
+ func findMaximumLength(nums []int) int {
128
+ n := len(nums)
129
+ f := make([]int, n+1)
130
+ pre := make([]int, n+2)
131
+ s := make([]int, n+1)
132
+ for i, x := range nums {
133
+ s[i+1] = s[i] + x
134
+ }
135
+ for i := 1; i <= n; i++ {
136
+ pre[i] = max(pre[i], pre[i-1])
137
+ f[i] = f[pre[i]] + 1
138
+ j := sort.SearchInts(s, s[i]*2-s[pre[i]])
139
+ pre[j] = max(pre[j], i)
140
+ }
141
+ return f[n]
142
+ }
143
+ ```
79
144
145
+ ### ** TypeScript**
146
+
147
+ ``` ts
148
+ function findMaximumLength(nums : number []): number {
149
+ const n = nums .length ;
150
+ const f: number [] = Array (n + 1 ).fill (0 );
151
+ const pre: number [] = Array (n + 2 ).fill (0 );
152
+ const s: number [] = Array (n + 1 ).fill (0 );
153
+ for (let i = 1 ; i <= n ; ++ i ) {
154
+ s [i ] = s [i - 1 ] + nums [i - 1 ];
155
+ }
156
+ const search = (nums : number [], x : number ): number => {
157
+ let [l, r] = [0 , nums .length ];
158
+ while (l < r ) {
159
+ const mid = (l + r ) >> 1 ;
160
+ if (nums [mid ] >= x ) {
161
+ r = mid ;
162
+ } else {
163
+ l = mid + 1 ;
164
+ }
165
+ }
166
+ return l ;
167
+ };
168
+ for (let i = 1 ; i <= n ; ++ i ) {
169
+ pre [i ] = Math .max (pre [i ], pre [i - 1 ]);
170
+ f [i ] = f [pre [i ]] + 1 ;
171
+ const j = search (s , s [i ] * 2 - s [pre [i ]]);
172
+ pre [j ] = i ;
173
+ }
174
+ return f [n ];
175
+ }
80
176
```
81
177
82
178
### ** ...**
0 commit comments