📖 Scenario: You are analyzing daily temperature changes to find the longest period of warming. You want to find the maximum sum of consecutive temperature changes in a list.
🎯 Goal: Build a program that uses Kadane's Algorithm to find the maximum sum of a contiguous subarray in an integer array.
📋 What You'll Learn
Create an integer array with exact values
Create an integer variable to hold the array size
Implement Kadane's Algorithm using a for loop
Print the maximum subarray sum
💡 Why This Matters
🌍 Real World
Kadane's Algorithm is used in finance to find the best time to buy and sell stocks for maximum profit, or in signal processing to find the strongest signal segment.
💼 Career
Understanding Kadane's Algorithm helps in solving array and dynamic programming problems efficiently, a common requirement in software engineering interviews and real-world coding tasks.
Progress0 / 4 steps
1
Create the integer array
Create an integer array called arr with these exact values: -2, 1, -3, 4, -1, 2, 1, -5, 4.
DSA C
Hint
Use curly braces to list the array values exactly as given.
2
Set the array size
Create an integer variable called n and set it to the size of arr (which is 9).
DSA C
Hint
Count the number of elements in arr and assign it to n.
3
Implement Kadane's Algorithm
Create two integer variables max_so_far and max_ending_here, both initialized to arr[0]. Then use a for loop with variable i from 1 to n - 1 to update max_ending_here as the maximum of arr[i] and max_ending_here + arr[i], and update max_so_far as the maximum of max_so_far and max_ending_here.
DSA C
Hint
Use a for loop starting from 1 to n-1. Update max_ending_here and max_so_far inside the loop.
4
Print the maximum subarray sum
Use printf to print the value of max_so_far followed by a newline.
DSA C
Hint
Use printf("%d\n", max_so_far); to print the result.
Practice
(1/5)
1. What does Kadane's Algorithm primarily help to find in an array?
easy
A. The total sum of all elements
B. The minimum element in the array
C. The maximum sum of a contiguous subarray
D. The maximum product of any two elements
Solution
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.
Step 2: Compare with other options
Options B, C, and D describe different problems unrelated to Kadane's Algorithm.
Final Answer:
The maximum sum of a contiguous subarray -> Option C
Quick Check:
Maximum subarray sum = maximum sum of contiguous elements [OK]
Hint: Kadane finds max sum in continuous parts of array [OK]
Common Mistakes:
Confusing max sum with max product
Thinking it finds minimum element
Assuming it sums all elements
2. Which of the following is the correct initialization step in Kadane's Algorithm in C?
easy
A. int max_so_far = INT_MIN, max_ending_here = 0;
B. int max_so_far = 0, max_ending_here = 0;
C. int max_so_far = 0, max_ending_here = INT_MIN;
D. int max_so_far = NULL, max_ending_here = 0;
Solution
Step 1: Understand initialization in Kadane's Algorithm
We initialize max_so_far to the smallest integer (INT_MIN) to handle arrays with all negative numbers correctly, and max_ending_here to 0 to start accumulating sums.
Step 2: Evaluate each option
int max_so_far = 0, max_ending_here = 0; initializes max_so_far to 0, which fails for all negative arrays. int max_so_far = 0, max_ending_here = INT_MIN; incorrectly initializes max_ending_here to INT_MIN. int max_so_far = NULL, max_ending_here = 0; uses NULL which is invalid for int.
Final Answer:
int max_so_far = INT_MIN, max_ending_here = 0; -> Option A
Quick Check:
Use INT_MIN for max_so_far to handle negatives [OK]
Hint: Start max_so_far at INT_MIN to handle negatives [OK]
Common Mistakes:
Initializing max_so_far to 0 causes wrong results
Using NULL for integer variables
Swapping initial values of variables
3. What is the output of the following C code using Kadane's Algorithm?
int arr[] = {-2, 3, 2, -1};
int n = 4;
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;
}
printf("%d", max_so_far);
After loop ends, max_so_far is 5, which is the maximum subarray sum.
Final Answer:
5 -> Option B
Quick Check:
Max subarray sum = 5 [OK]
Hint: Add elements, reset sum if negative, track max sum [OK]
Common Mistakes:
Not resetting max_ending_here when negative
Confusing max_so_far with current sum
Incorrectly summing non-contiguous elements
4. Identify the bug in this Kadane's Algorithm implementation in C:
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. max_so_far should be initialized to INT_MIN
B. max_ending_here should be initialized to INT_MIN
C. Loop should start from i = 1
D. Return statement should return max_ending_here
Solution
Step 1: Analyze initialization of max_so_far
Initializing max_so_far to 0 fails when all array elements are negative, as max_so_far will never update to a negative number.
Step 2: Correct initialization and effect
Setting max_so_far to INT_MIN ensures the algorithm correctly finds the maximum subarray sum even if all numbers are negative.
Final Answer:
max_so_far should be initialized to INT_MIN -> Option A
Quick Check:
Use INT_MIN for max_so_far to handle negative arrays [OK]
Hint: Initialize max_so_far to INT_MIN for negative arrays [OK]
Common Mistakes:
Initializing max_so_far to 0 causes wrong max for negatives
Changing loop start index unnecessarily
Returning wrong variable
5. Given an array int arr[] = {-3, -2, -1, -4}, what is the maximum subarray sum using Kadane's Algorithm?
hard
A. -3
B. 0
C. -10
D. -1
Solution
Step 1: Understand Kadane's behavior with all negative numbers
When all numbers are negative, resetting max_ending_here to 0 loses the maximum negative number. Proper Kadane's initialization with max_so_far = INT_MIN helps track the largest negative number.
Step 2: Trace the array values
max_so_far starts at INT_MIN. i=0: max_ending_here = -3; max_so_far = -3; reset max_ending_here to 0 since negative. i=1: max_ending_here = -2; max_so_far = max(-3, -2) = -2; reset max_ending_here to 0. i=2: max_ending_here = -1; max_so_far = max(-2, -1) = -1; reset max_ending_here to 0. i=3: max_ending_here = -4; max_so_far = max(-1, -4) = -1; reset max_ending_here to 0.
Final Answer:
-1 -> Option D
Quick Check:
Max negative number = -1 [OK]
Hint: Max subarray in negatives is max single element [OK]
Common Mistakes:
Returning 0 instead of max negative
Not handling all negative arrays
Assuming sum must be positive
Recommended
Ready to prove it?
Pass the test and this pattern moves unknownstrongwhile earning +1 Grip toward your certificate.