Bird
0
0
DSA Cprogramming~20 mins

Kadane's Algorithm Maximum Subarray in DSA C - Practice Problems & Challenges

Choose your learning style9 modes available
Challenge - 5 Problems
🎖️
Kadane's Algorithm Master
Get all challenges correct to earn this badge!
Test your skills under time pressure!
Predict Output
intermediate
2:00remaining
What is the output of Kadane's algorithm on this array?
Given the array int arr[] = {-2, 1, -3, 4, -1, 2, 1, -5, 4};, what is the maximum subarray sum found by Kadane's algorithm?
DSA C
int maxSubArraySum(int arr[], int size) {
    int max_so_far = arr[0];
    int curr_max = arr[0];
    for (int i = 1; i < size; i++) {
        curr_max = (arr[i] > curr_max + arr[i]) ? arr[i] : curr_max + arr[i];
        max_so_far = (max_so_far > curr_max) ? max_so_far : curr_max;
    }
    return max_so_far;
}

int main() {
    int arr[] = {-2, 1, -3, 4, -1, 2, 1, -5, 4};
    int n = sizeof(arr)/sizeof(arr[0]);
    int max_sum = maxSubArraySum(arr, n);
    printf("%d", max_sum);
    return 0;
}
A4
B7
C5
D6
Attempts:
2 left
💡 Hint
Think about the contiguous subarray with the largest sum.
Predict Output
intermediate
2:00remaining
What is the maximum subarray sum for all negative numbers?
Consider the array int arr[] = {-8, -3, -6, -2, -5, -4};. What does Kadane's algorithm return as the maximum subarray sum?
DSA C
int maxSubArraySum(int arr[], int size) {
    int max_so_far = arr[0];
    int curr_max = arr[0];
    for (int i = 1; i < size; i++) {
        curr_max = (arr[i] > curr_max + arr[i]) ? arr[i] : curr_max + arr[i];
        max_so_far = (max_so_far > curr_max) ? max_so_far : curr_max;
    }
    return max_so_far;
}

int main() {
    int arr[] = {-8, -3, -6, -2, -5, -4};
    int n = sizeof(arr)/sizeof(arr[0]);
    int max_sum = maxSubArraySum(arr, n);
    printf("%d", max_sum);
    return 0;
}
A-3
B-2
C-4
D-5
Attempts:
2 left
💡 Hint
Kadane's algorithm returns the largest single element if all are negative.
🔧 Debug
advanced
2:00remaining
Identify the bug in this Kadane's algorithm implementation
What error does this code produce when run on int arr[] = {-8, -3, -6, -2, -5, -4};?
DSA C
int maxSubArraySum(int arr[], int size) {
    int max_so_far = 0;
    int curr_max = 0;
    for (int i = 0; i < size; i++) {
        curr_max += arr[i];
        if (curr_max < 0)
            curr_max = 0;
        if (max_so_far < curr_max)
            max_so_far = curr_max;
    }
    return max_so_far;
}

int main() {
    int arr[] = {-8, -3, -6, -2, -5, -4};
    int n = sizeof(arr)/sizeof(arr[0]);
    int max_sum = maxSubArraySum(arr, n);
    printf("%d", max_sum);
    return 0;
}
AReturns 0, which is incorrect
BReturns -2, which is correct
CReturns -8, which is incorrect
DCompilation error due to missing return
Attempts:
2 left
💡 Hint
Check how max_so_far and curr_max are initialized and updated.
🧠 Conceptual
advanced
1:30remaining
What does Kadane's algorithm track during iteration?
Which two values does Kadane's algorithm maintain while scanning the array to find the maximum subarray sum?
ACurrent subarray sum and maximum subarray sum so far
BMinimum element and maximum element in the array
CSum of all elements and length of the array
DIndex of first and last elements of the array
Attempts:
2 left
💡 Hint
Think about what changes as you move through the array.
🚀 Application
expert
3:00remaining
Find the maximum subarray sum and its indices
Modify Kadane's algorithm to also return the start and end indices of the maximum sum subarray for int arr[] = {-2, 1, -3, 4, -1, 2, 1, -5, 4};. What are the start and end indices of the maximum subarray?
DSA C
void maxSubArraySumWithIndices(int arr[], int size, int *max_sum, int *start, int *end) {
    int curr_max = arr[0];
    int max_so_far = arr[0];
    int s = 0;
    *start = 0;
    *end = 0;
    for (int i = 1; i < size; i++) {
        if (arr[i] > curr_max + arr[i]) {
            curr_max = arr[i];
            s = i;
        } else {
            curr_max += arr[i];
        }
        if (curr_max > max_so_far) {
            max_so_far = curr_max;
            *start = s;
            *end = i;
        }
    }
    *max_sum = max_so_far;
}

int main() {
    int arr[] = {-2, 1, -3, 4, -1, 2, 1, -5, 4};
    int n = sizeof(arr)/sizeof(arr[0]);
    int max_sum, start, end;
    maxSubArraySumWithIndices(arr, n, &max_sum, &start, &end);
    printf("Max sum: %d, Start index: %d, End index: %d", max_sum, start, end);
    return 0;
}
AMax sum: 7, Start index: 2, End index: 6
BMax sum: 6, Start index: 2, End index: 5
CMax sum: 6, Start index: 3, End index: 6
DMax sum: 5, Start index: 3, End index: 7
Attempts:
2 left
💡 Hint
Track the start index when resetting current max sum.