Bird
Raised Fist0
DSA C++programming~10 mins

Kadane's Algorithm Maximum Subarray in DSA C++ - Execution Trace

Choose your learning style10 modes available
Concept Flow - Kadane's Algorithm Maximum Subarray
Start at first element
↓
Initialize current_sum and max_sum
↓
For each element in array
↓
Update current_sum = max(element, current_sum + element)
↓
Update max_sum = max(max_sum, current_sum)
↓
Repeat for all elements
↓
Return max_sum
Kadane's algorithm scans the array once, keeping track of the best sum ending at each position and the overall best sum found.
Execution Sample
DSA C++
int maxSubArray(vector<int>& nums) {
  int current_sum = nums[0];
  int max_sum = nums[0];
  for (int i = 1; i < nums.size(); i++) {
    current_sum = max(nums[i], current_sum + nums[i]);
    max_sum = max(max_sum, current_sum);
  }
  return max_sum;
}
This code finds the maximum sum of any continuous subarray in the input array.
Execution Table
StepOperationIndex (i)Current ElementCurrent SumMax SumSubarray Ending Here
1Initialize0-2-2-2[-2]
2Process element11max(1, -2+1)=1max(-2,1)=1[1]
3Process element2-3max(-3,1-3)=-2max(1,-2)=1[1, -3]
4Process element34max(4,-2+4)=4max(1,4)=4[4]
5Process element4-1max(-1,4-1)=3max(4,3)=4[4,-1]
6Process element52max(2,3+2)=5max(4,5)=5[4,-1,2]
7Process element61max(1,5+1)=6max(5,6)=6[4,-1,2,1]
8Process element7-5max(-5,6-5)=1max(6,1)=6[4,-1,2,1,-5]
9Process element84max(4,1+4)=5max(6,5)=6[4,-1,2,1,-5,4]
10End---6Maximum subarray sum found
💡 All elements processed; max_sum = 6 is the maximum subarray sum.
Variable Tracker
VariableStartAfter 1After 2After 3After 4After 5After 6After 7After 8After 9Final
current_sum-21-243561555
max_sum-21144566666
i0123456789-
Key Moments - 3 Insights
Why do we compare current element with current_sum + element?
Because at each step (see rows 2-9 in execution_table), we decide whether to start a new subarray at current element or continue the previous subarray by adding current element. This ensures we keep the best possible sum ending at current index.
Why do we update max_sum after updating current_sum?
Because max_sum must always hold the best sum found so far, including the current position. See execution_table rows 2-9 where max_sum updates after current_sum to track the global maximum.
What happens if all numbers are negative?
Kadane's algorithm still works because it initializes current_sum and max_sum with the first element (row 1). It picks the maximum single element if adding more reduces sum, so max_sum ends up as the largest negative number.
Visual Quiz - 3 Questions
Test your understanding
Look at the execution_table at step 6, what is the current_sum value?
A5
B3
C6
D4
💡 Hint
Check the 'Current Sum' column at step 6 in execution_table.
At which step does max_sum first become 4?
AStep 3
BStep 4
CStep 5
DStep 6
💡 Hint
Look at the 'Max Sum' column in execution_table and find when it changes to 4.
If the input array started with [3, -1, ...] instead of [-2, 1, ...], what would be the initial current_sum and max_sum?
ABoth 3
BBoth -2
Ccurrent_sum=3, max_sum=1
Dcurrent_sum=1, max_sum=3
💡 Hint
Initialization sets current_sum and max_sum to the first element of the array.
Concept Snapshot
Kadane's Algorithm finds max sum of continuous subarray.
Initialize current_sum and max_sum with first element.
For each element, update current_sum = max(element, current_sum + element).
Update max_sum = max(max_sum, current_sum).
Return max_sum after processing all elements.
Full Transcript
Kadane's algorithm scans the array once, keeping track of the best sum ending at each position and the overall best sum found. It initializes current_sum and max_sum with the first element. Then for each element, it updates current_sum by choosing the maximum between the current element alone or adding it to the previous current_sum. It updates max_sum if current_sum is better. This way, it finds the maximum sum of any continuous subarray efficiently in one pass.

Practice

(1/5)
1. What does Kadane's Algorithm primarily find in an array of integers?
easy
A. The total sum of all elements
B. The minimum element in the array
C. The maximum product of any two elements
D. The maximum sum of a contiguous subarray

Solution

  1. Step 1: Understand the problem Kadane's Algorithm solves

    Kadane's Algorithm is designed to find the maximum sum of a contiguous subarray within a one-dimensional array of numbers.
  2. Step 2: Compare options with the algorithm's purpose

    Options A, B, and D do not describe the main goal of Kadane's Algorithm. Only The maximum sum of a contiguous subarray correctly states it finds the maximum sum of a contiguous subarray.
  3. Final Answer:

    The maximum sum of a contiguous subarray -> Option D
  4. Quick Check:

    Maximum subarray sum = maximum sum of contiguous elements [OK]
Hint: Kadane finds max sum in a continuous slice [OK]
Common Mistakes:
  • Confusing maximum sum with maximum product
  • Thinking it finds minimum element
  • Assuming it sums all elements
2. Which of the following is the correct initialization for Kadane's Algorithm variables in C++?
easy
A. int max_so_far = INT_MIN, max_ending_here = 0;
B. int max_so_far = INT_MAX, max_ending_here = INT_MAX;
C. int max_so_far = 0, max_ending_here = INT_MIN;
D. int max_so_far = 0, max_ending_here = 0;

Solution

  1. Step 1: Understand variable roles in Kadane's Algorithm

    max_so_far stores the maximum sum found so far, so it should start very low (INT_MIN) to allow any sum to replace it. max_ending_here tracks the current subarray sum and starts at 0.
  2. Step 2: Check each option's initialization

    int max_so_far = INT_MIN, max_ending_here = 0; correctly initializes max_so_far to INT_MIN and max_ending_here to 0. Other options either start max_so_far at 0 or INT_MAX, which can cause incorrect results.
  3. Final Answer:

    int max_so_far = INT_MIN, max_ending_here = 0; -> Option A
  4. Quick Check:

    max_so_far = INT_MIN, max_ending_here = 0 [OK]
Hint: Start max_so_far at INT_MIN to handle negatives [OK]
Common Mistakes:
  • Initializing max_so_far to 0 causes wrong results with negatives
  • Setting max_ending_here to INT_MIN breaks logic
  • Using INT_MAX causes overflow issues
3. What is the output of the following C++ code using Kadane's Algorithm?
int arr[] = {-2, 1, -3, 4, -1, 2, 1, -5, 4};
int n = 9;
int max_so_far = INT_MIN, max_ending_here = 0;
for (int i = 0; i < n; i++) {
    max_ending_here += arr[i];
    if (max_so_far < max_ending_here)
        max_so_far = max_ending_here;
    if (max_ending_here < 0)
        max_ending_here = 0;
}
std::cout << max_so_far << std::endl;
medium
A. 6
B. 7
C. 5
D. 4

Solution

  1. Step 1: Trace Kadane's Algorithm on the array

    Iterate through arr: max_ending_here and max_so_far update as follows:
    - i=0: max_ending_here=-2, max_so_far=-2, reset max_ending_here=0
    - i=1: max_ending_here=1, max_so_far=1
    - i=2: max_ending_here=-2, max_so_far=1, reset max_ending_here=0
    - i=3: max_ending_here=4, max_so_far=4
    - i=4: max_ending_here=3, max_so_far=4
    - i=5: max_ending_here=5, max_so_far=5
    - i=6: max_ending_here=6, max_so_far=6
    - i=7: max_ending_here=1, max_so_far=6
    - i=8: max_ending_here=5, max_so_far=6
  2. Step 2: Identify maximum subarray sum

    The maximum sum found is 6, which corresponds to subarray [4, -1, 2, 1].
  3. Final Answer:

    6 -> Option A
  4. Quick Check:

    Max subarray sum = 6 [OK]
Hint: Add elements, reset sum if negative, track max [OK]
Common Mistakes:
  • Not resetting max_ending_here when negative
  • Confusing max_so_far with current sum
  • Miscounting subarray sums
4. Identify the bug in this Kadane's Algorithm implementation and select the fix:
int maxSubArraySum(int arr[], int n) {
    int max_so_far = 0, max_ending_here = 0;
    for (int i = 0; i < n; i++) {
        max_ending_here += arr[i];
        if (max_so_far < max_ending_here)
            max_so_far = max_ending_here;
        if (max_ending_here < 0)
            max_ending_here = 0;
    }
    return max_so_far;
}
medium
A. Remove resetting max_ending_here to 0
B. Initialize max_ending_here to INT_MIN instead of 0
C. Initialize max_so_far to INT_MIN instead of 0
D. Change loop to start from i = 1

Solution

  1. Step 1: Analyze initialization impact on negative arrays

    Starting max_so_far at 0 causes incorrect results if all array elements are negative, as max_so_far will never update to a negative sum.
  2. Step 2: Fix initialization to handle all negative values

    Setting max_so_far to INT_MIN allows it to update correctly even if all elements are negative, ensuring the maximum subarray sum is found.
  3. Final Answer:

    Initialize max_so_far to INT_MIN instead of 0 -> Option C
  4. Quick Check:

    max_so_far = INT_MIN fixes negative-only arrays [OK]
Hint: Use INT_MIN for max_so_far to handle negatives [OK]
Common Mistakes:
  • Leaving max_so_far at 0 causes wrong max for negatives
  • Removing reset breaks algorithm logic
  • Changing loop start misses first element
5. Given an array with all negative numbers: int arr[] = {-8, -3, -6, -2, -5, -4}; What is the maximum subarray sum using Kadane's Algorithm?
hard
A. 0
B. -2
C. -3
D. -8

Solution

  1. Step 1: Understand Kadane's behavior with all negative numbers

    When all numbers are negative, resetting max_ending_here to 0 causes the algorithm to miss the largest (least negative) number. Proper initialization with max_so_far = INT_MIN helps track the max single element.
  2. Step 2: Identify the maximum single element

    The largest number in the array is -2, which is the maximum subarray sum since any longer subarray sum will be smaller.
  3. Final Answer:

    -2 -> Option B
  4. Quick Check:

    Max single negative element = -2 [OK]
Hint: Max subarray in negatives is max single element [OK]
Common Mistakes:
  • Assuming max sum is 0 by resetting sums
  • Ignoring single element max in negative arrays
  • Confusing minimum with maximum
Recommended

Ready to prove it?

Pass the test and this pattern moves unknown strong while earning +1 Grip toward your certificate.

10 questions~5 mineasy hard