Skip to content

Commit 84cb83e

Browse files
add 918
1 parent bf88a9a commit 84cb83e

File tree

3 files changed

+79
-1
lines changed

3 files changed

+79
-1
lines changed

README.md

+2-1
Original file line numberDiff line numberDiff line change
@@ -135,4 +135,5 @@ LeetCode
135135
|0455|[Assign Cookies](https://leetcode.com/problems/assign-cookies/) | c | [c++](./src/0455-Assign-Cookies/0455.cpp) |[python](./src/0455-Assign-Cookies/0455.py)|||Easy|
136136
|0474|[Ones and Zeroes](https://leetcode.com/problems/ones-and-zeroes/) | c | [c++](./src/0474-Ones-and-Zeroes/0474.cpp) |[python](./src/0474-Ones-and-Zeroes/0474.py)|||Medium|
137137
|0494|[Target Sum](https://leetcode.com/problems/target-sum/) | c | [c++](./src/0494-Target-Sum/0494.cpp) |[python](./src/0494-Target-Sum/0494.py)|||Medium|
138-
|0917|[Reverse Only Letters](https://leetcode.com/problems/reverse-only-letters/) | c | [c++](./src/0917-Reverse-Only-Letters/0917.cpp) |[python](./src/0917-Reverse-Only-Letters/0917.py)|||Easy|
138+
|0917|[Reverse Only Letters](https://leetcode.com/problems/reverse-only-letters/) | c | [c++](./src/0917-Reverse-Only-Letters/0917.cpp) |[python](./src/0917-Reverse-Only-Letters/0917.py)|||Easy|
139+
|0918|[Maximum Sum Circular Subarray](https://leetcode.com/problems/maximum-sum-circular-subarray/) | c | [c++](./src/0918-Maximum-Sum-Circular-Subarray/0918.cpp) |[python](./src/0918-Maximum-Sum-Circular-Subarray/0918.py)|||Medium|
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,42 @@
1+
#include <iostream>
2+
#include <vector>
3+
#include <algorithm>
4+
using namespace std;
5+
6+
static int x = []() {std::ios::sync_with_stdio(false); cin.tie(0); return 0; }();
7+
class Solution
8+
{
9+
public:
10+
int maxSubarraySumCircular(vector<int>& A)
11+
{
12+
int max_A = *max_element(A.begin(), A.end());
13+
if (max_A < 0) return max_A;
14+
int result1 = kadane(A);
15+
int result2 = 0;
16+
for (unsigned int i = 0; i < A.size(); ++i)
17+
{
18+
result2 += A[i];
19+
A[i] = -A[i];
20+
}
21+
result2 += kadane(A);
22+
return max(result1, result2);
23+
}
24+
private:
25+
int kadane(vector<int>& nums)
26+
{
27+
int cur = 0, result = 0;
28+
for (auto& num :nums)
29+
{
30+
cur += num;
31+
if (cur < 0) cur = 0;
32+
if (result < cur) result = cur;
33+
}
34+
return result;
35+
}
36+
};
37+
int main()
38+
{
39+
vector<int> A = {-2,-3,-1};
40+
cout << Solution().maxSubarraySumCircular(A);
41+
return 0;
42+
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,35 @@
1+
class Solution:
2+
def maxSubarraySumCircular(self, a):
3+
"""
4+
:type A: List[int]
5+
:rtype: int
6+
"""
7+
def kadane(nums):
8+
cur, result = 0, 0
9+
for num in nums:
10+
cur += num
11+
if cur < 0:
12+
cur = 0
13+
if result < cur:
14+
result = cur
15+
return result
16+
17+
max_a = max(a)
18+
if max_a < 0:
19+
return max_a
20+
21+
len_a = len(a)
22+
result1 = kadane(a)
23+
result2 = 0
24+
for i in range(len_a):
25+
result2 += a[i]
26+
a[i] = -a[i]
27+
28+
result2 += kadane(a)
29+
30+
return max(result1, result2)
31+
32+
33+
if __name__ == "__main__":
34+
A = [-2, -3, -1]
35+
print(Solution().maxSubarraySumCircular(A))

0 commit comments

Comments
 (0)