1. Nested Loops All Subarrays
Intuition
Check every subarray sum from starting index i to ending index j, tracking the maximum sum.
Algorithm
- 1. Initialize maxSum = nums[0].
- 2. For i from 0 to n-1: - currentSum = 0 - For j from i to n-1: - currentSum += nums[j] - maxSum = max(maxSum, currentSum).
- 3. Return maxSum.
Brute Force All Subarrays Exhaustive Enumeration
2 of 2 questions left todaySubarray [0
Subarray [0..0]: First element is -2. Baseline maxSum is -2.
#include <iostream>#include <vector>#include <string>#include <algorithm>#include <unordered_map>#include <unordered_set>#include <queue>#include <stack>#include <numeric>#include <climits> using namespace std; class Solution {public: int maxSubArray(vector<int>& nums) { int n = nums.size(); int maxSum = nums[0]; for (int i = 0; i < n; ++i) { int sum = 0; for (int j = i; j < n; ++j) { sum += nums[j]; maxSum = max(maxSum, sum); } } return maxSum; }}; int main() { Solution sol; vector<int> nums = {-2, 1, -3, 4, -1, 2, 1, -5, 4}; cout << "Maximum Subarray Sum: " << sol.maxSubArray(nums) << endl; return 0;}Time & Space Complexity
- Time complexity:
O(N^2)— Evaluates all N*(N+1)/2 subarrays in nested loops, resulting in O(N2) time. - Space complexity:
O(1)— Auxiliary memory is O(1).
Why Brute Force Doesn't Scale:
For N = 105, quadratic O(N2) approaches require ~1010 operations, exceeding the standard 1-second CPU budget.
The optimal approach processes N elements in a single or logarithmic pass, completing in under 10ms with minimal memory footprint.