-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathmaximum_subarray_test.dart
68 lines (62 loc) · 1.96 KB
/
maximum_subarray_test.dart
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
import 'dart:math' as math;
import 'package:test/test.dart';
/// Given an integer array [values], find the contiguous subarray
/// (containing at least one number) which has the largest sum
/// and return its sum.
///
/// A subarray is a contiguous part of an array.
///
/// 1 <= values.length <= 105
/// -104 <= values[i] <= 104
int maximumSubarray(List<int> values) {
var max = values.first, current = max;
for (final value in values.skip(1)) {
/* This is shorter, but more confusing */
// current = math.max(current + v, v);
current = current.isNegative ? value : current + value;
max = math.max(current, max);
}
return max;
}
// Time Limit Exceeded on LeetCode
int maximumSubarrayN2(List<int> values) {
var max = values.first;
for (var i = 0; i < values.length; i++) {
for (var j = i, current = 0; j < values.length; j++) {
current += values[j];
max = math.max(max, current);
}
}
return max;
}
// Time Limit Exceeded on LeetCode
int maximumSubarrayN3(List<int> values) {
var max = values.first;
for (var i = 0; i < values.length; i++) {
for (var j = i; j < values.length; j++) {
var current = 0;
for (var k = i; k <= j; k++) current += values[k];
max = math.max(max, current);
}
}
return max;
}
void main() {
group('maximumSubarray', () {
test('lc examples', () {
expect(maximumSubarray([-2, 1, -3, 4, -1, 2, 1, -5, 4]), 6);
expect(maximumSubarray([1]), 1);
expect(maximumSubarray([5, 4, -1, 7, 8]), 23);
});
test('more examples', () {
expect(maximumSubarray([-1]), -1);
expect(maximumSubarray([0]), 0);
expect(maximumSubarray([2, -1, 2]), 3);
expect(maximumSubarray([-1, 4, -1]), 4);
expect(maximumSubarray([5, 4, -1, -99, 7, 8]), 15);
expect(maximumSubarray([-5, -4, -3, -6, -9, -2, -7]), -2);
expect(maximumSubarray([-1, -4, -3, -6, -9, -2, -7]), -1);
expect(maximumSubarray([-1, -4, -3, -6, -9, -2, 0]), 0);
});
});
}