Maximum Sum Circular Subarray
Problem Statement
Section titled “Problem Statement”LeetCode #918 - Maximum Sum Circular Subarray
Section titled “LeetCode #918 - Maximum Sum Circular Subarray”Solve this classic coding interview problem efficiently using multiple approaches.
Examples
Section titled “Examples”| Input | Output | Explanation |
|---|---|---|
[example1] | result1 | Explanation goes here |
[example2] | result2 | Explanation goes here |
Constraints
Section titled “Constraints”- Standard LeetCode constraints
- Refer to the official problem statement for exact details
Real-World Applications
Section titled “Real-World Applications”Complexity Comparison
Section titled “Complexity Comparison”| Approach | Time | Space | Best When |
|---|---|---|---|
| Total - Min | O(n) | O(1) | Optimal — clever formula |
| Kadane Circular | O(n) | O(1) | Alternative O(n) |
| Brute Force | O(n²) | O(1) | Learning |
Which approach should you learn first?
Section titled “Which approach should you learn first?”- Pick Total - Min for the optimal solution — it is elegant and efficient.
- Pick Kadane Circular for a pure Kadane extension.
- Pick Brute Force if you are learning from scratch.
Optimal
Total - Min
O(n) time · O(1) space
Kadane Extended
Kadane Circular
O(n) time · O(1) space
Simple to Learn
Brute Force
O(n²) time · O(1) space
Approach 1: Total - Minimum Subarray (Recommended)
Section titled “Approach 1: Total - Minimum Subarray (Recommended)”The maximum circular sum is either the maximum non-circular sum OR the total sum minus the minimum subarray sum.
⏱ Time O(n) Single pass 💾 Space O(1) Constant
Solution Code
Section titled “Solution Code”from typing import List
def maximum_sum_circular_subarray_total_minus_minimum(nums: List[int]) -> int: """ Maximum Sum Circular Subarray - Total Minus Minimum approach.
Time: O(n), Space: O(1) or O(n) depending on approach """ pass
if __name__ == "__main__": # Test cases pass#include <iostream>#include <vector>#include <unordered_map>using namespace std;
class Solution {public: int maximum_sum_circular_subarray_total_minus_minimum(vector<int>& nums) { // Maximum Sum Circular Subarray - Total Minus Minimum approach return 0; }};
int main() { return 0;}import java.util.*;
class Solution { public int maximum_sum_circular_subarray_total_minus_minimum(int[] nums) { // Maximum Sum Circular Subarray - Total Minus Minimum approach return 0; }
public static void main(String[] args) { // Test cases }}/** * {@param {number[]} nums} * {@return {number}} */var maximum_sum_circular_subarrayTotalminusminimum = function(nums) { // Maximum Sum Circular Subarray - Total Minus Minimum approach return 0;};
if (require.main === module) { // Test cases}pub fn maximum_sum_circular_subarray_total_minus_minimum(nums: Vec<i32>) -> i32 { // Maximum Sum Circular Subarray - Total Minus Minimum approach 0}
fn main() { // Test cases}package main
import "fmt"
func maximum_sum_circular_subarrayTotalminusminimum(nums []int) int { // Maximum Sum Circular Subarray - Total Minus Minimum approach return 0}
func main() { // Test cases}Approach 2: Kadane’s Algorithm (Circular)
Section titled “Approach 2: Kadane’s Algorithm (Circular)”Extend Kadane’s algorithm to handle the circular case by also tracking the minimum subarray.
⏱ Time O(n) Single pass 💾 Space O(1) Constant
Solution Code
Section titled “Solution Code”from typing import List
def maximum_sum_circular_subarray_kadane_circular(nums: List[int]) -> int: """ Maximum Sum Circular Subarray - Kadane Circular approach.
Time: O(n), Space: O(1) or O(n) depending on approach """ pass
if __name__ == "__main__": # Test cases pass#include <iostream>#include <vector>#include <unordered_map>using namespace std;
class Solution {public: int maximum_sum_circular_subarray_kadane_circular(vector<int>& nums) { // Maximum Sum Circular Subarray - Kadane Circular approach return 0; }};
int main() { return 0;}import java.util.*;
class Solution { public int maximum_sum_circular_subarray_kadane_circular(int[] nums) { // Maximum Sum Circular Subarray - Kadane Circular approach return 0; }
public static void main(String[] args) { // Test cases }}/** * {@param {number[]} nums} * {@return {number}} */var maximum_sum_circular_subarrayKadanecircular = function(nums) { // Maximum Sum Circular Subarray - Kadane Circular approach return 0;};
if (require.main === module) { // Test cases}pub fn maximum_sum_circular_subarray_kadane_circular(nums: Vec<i32>) -> i32 { // Maximum Sum Circular Subarray - Kadane Circular approach 0}
fn main() { // Test cases}package main
import "fmt"
func maximum_sum_circular_subarrayKadanecircular(nums []int) int { // Maximum Sum Circular Subarray - Kadane Circular approach return 0}
func main() { // Test cases}Approach 3: Brute Force
Section titled “Approach 3: Brute Force”Check all possible subarrays (including those that wrap around the circular array).
⏱ Time O(n²) All pairs 💾 Space O(1) Constant
Solution Code
Section titled “Solution Code”from typing import List
def maximum_sum_circular_subarray_brute_force(nums: List[int]) -> int: """ Maximum Sum Circular Subarray - Brute Force approach.
Time: O(n), Space: O(1) or O(n) depending on approach """ pass
if __name__ == "__main__": # Test cases pass#include <iostream>#include <vector>#include <unordered_map>using namespace std;
class Solution {public: int maximum_sum_circular_subarray_brute_force(vector<int>& nums) { // Maximum Sum Circular Subarray - Brute Force approach return 0; }};
int main() { return 0;}import java.util.*;
class Solution { public int maximum_sum_circular_subarray_brute_force(int[] nums) { // Maximum Sum Circular Subarray - Brute Force approach return 0; }
public static void main(String[] args) { // Test cases }}/** * {@param {number[]} nums} * {@return {number}} */var maximum_sum_circular_subarrayBruteforce = function(nums) { // Maximum Sum Circular Subarray - Brute Force approach return 0;};
if (require.main === module) { // Test cases}pub fn maximum_sum_circular_subarray_brute_force(nums: Vec<i32>) -> i32 { // Maximum Sum Circular Subarray - Brute Force approach 0}
fn main() { // Test cases}package main
import "fmt"
func maximum_sum_circular_subarrayBruteforce(nums []int) int { // Maximum Sum Circular Subarray - Brute Force approach return 0}
func main() { // Test cases}