-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy path53.cpp
105 lines (92 loc) · 2.91 KB
/
53.cpp
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
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
#include <gtest/gtest.h>
#include <vector>
using namespace std;
class Solution {
public:
// tuple<int, int, int> crossing(vector<int>& nums, int left,int mid, int right) {
// int sum = 0;
// int lSum = INT_MIN;
// int rSum = INT_MIN;
// int lMin = mid;
// int rMax = mid + 1;
// for (auto i = mid; i >= left; i--) {
// sum += nums[i];
// if (sum > lSum) {
// lSum = sum;
// lMin = i;
// }
// }
// sum = 0;
// for (auto i = mid +1 ; i <= right; i++) {
// sum += nums[i];
// if (sum > rSum) {
// rSum = sum;
// rMax = i;
// }
// }
// return {lSum + rSum, lMin, rMax};
// }
// tuple<int, int, int> solver(vector<int>& nums, int left, int right) {
// if (left == right) {
// return {nums[left], left, right};
// }
// int mid = left + (right - left) / 2;
// auto [lSum, lMin, lMax] = solver(nums, left, mid);
// auto [rSum, rMin, rMax] = solver(nums, mid + 1, right);
// auto [cSum, cMin, cMax] = crossing(nums, left, mid, right);
// if (lSum >= rSum && lSum >= cSum) {
// return {lSum, lMin, lMax};
// }
// else if (rSum >= lSum && rSum >= cSum) {
// return {rSum, rMin, rMax};
// }
// else {
// return {cSum, cMin, cMax};
// }
// }
// int maxSubArray(vector<int>& nums) {
// tuple ans = solver(nums, 0, nums.size() - 1);
// return get<0>(ans);
// }
int maxSubArray(vector<int>& nums) {
int maxSum = INT_MIN;
int curSum = 0;
for (auto num : nums) {
curSum = max(curSum + num, num);
maxSum = max(maxSum, curSum);
}
return maxSum;
}
};
class Testing : public testing::Test {
public:
Solution sol;
};
TEST_F(Testing, Case1) {
vector<int> nums = {-2, 1, -3, 4, -1, 2, 1, -5, 4};
EXPECT_EQ(sol.maxSubArray(nums), 6);
}
TEST_F(Testing, Case2) {
vector<int> nums = {1};
EXPECT_EQ(sol.maxSubArray(nums), 1);
}
TEST_F(Testing, Case3) {
vector<int> nums = {5, 4, -1, 7, 8};
EXPECT_EQ(sol.maxSubArray(nums), 23);
}
TEST_F(Testing, Case4) {
vector<int> nums = {-1};
EXPECT_EQ(sol.maxSubArray(nums), -1);
}
TEST_F(Testing, Case5) {
vector<int> nums = {-2, 1};
EXPECT_EQ(sol.maxSubArray(nums), 1);
}
TEST_F(Testing, Case6) {
vector<int> nums = {-2, -1};
EXPECT_EQ(sol.maxSubArray(nums), -1);
}
int main(int argc, char **argv) {
testing::InitGoogleTest(&argc, argv);
return RUN_ALL_TESTS();
}