📖 Scenario: You are analyzing daily temperature changes to find the longest warm streak. Each day's temperature change is recorded as a number (positive for warmer, negative for colder). You want to find the maximum sum of consecutive days' temperature changes to identify the warmest period.
🎯 Goal: Build a Java program that uses Kadane's Algorithm to find the maximum sum of a contiguous subarray from a list of integers representing daily temperature changes.
📋 What You'll Learn
Create an integer array called tempChanges with exact values
Create an integer variable called maxSoFar to track the maximum sum found
Create an integer variable called maxEndingHere to track the current subarray sum
Use a for loop with variable i to iterate over tempChanges
Update maxEndingHere and maxSoFar inside the loop using Kadane's logic
Print the value of maxSoFar as the final output
💡 Why This Matters
🌍 Real World
Finding the warmest period in temperature changes helps meteorologists and farmers plan better.
💼 Career
Kadane's Algorithm is a classic technique used in software engineering interviews and real-world problems involving maximum sums in arrays.
Progress0 / 4 steps
1
Create the temperature changes array
Create an integer array called tempChanges with these exact values: {-2, 3, 2, -1, 4, -5, 4}
DSA Java
Hint
Use int[] tempChanges = { ... }; to create the array with the exact numbers.
2
Initialize variables for Kadane's Algorithm
Create two integer variables called maxSoFar and maxEndingHere, both initialized to the first element of tempChanges
DSA Java
Hint
Set both variables equal to tempChanges[0] to start tracking sums.
3
Implement Kadane's Algorithm loop
Use a for loop with variable i starting from 1 to iterate over tempChanges. Inside the loop, update maxEndingHere to the maximum of tempChanges[i] and maxEndingHere + tempChanges[i]. Then update maxSoFar to the maximum of maxSoFar and maxEndingHere.
DSA Java
Hint
Use Math.max to update maxEndingHere and maxSoFar inside the loop.
4
Print the maximum subarray sum
Print the value of maxSoFar using System.out.println(maxSoFar);
DSA Java
Hint
Use System.out.println(maxSoFar); to show the result.
Practice
(1/5)
1. What does Kadane's Algorithm primarily help to find in an array of integers?
easy
A. The minimum element in the array
B. The number of positive elements
C. The total sum of all elements
D. The maximum sum of a contiguous subarray
Solution
Step 1: Understand the problem Kadane's Algorithm solves
Kadane's Algorithm is designed to find the maximum sum of any contiguous subarray within a given array.
Step 2: Differentiate from other array operations
It does not find minimum elements, total sum, or count positives, but specifically the maximum sum of a continuous segment.
Final Answer:
The maximum sum of a contiguous subarray -> Option D
Quick Check:
Maximum subarray sum = maximum sum of contiguous elements [OK]
Hint: Kadane's finds max sum of continuous elements fast [OK]
Common Mistakes:
Confusing maximum subarray sum with total array sum
Thinking it finds minimum or count of elements
Assuming it works on non-contiguous elements
2. Which of the following is the correct initialization for Kadane's Algorithm variables in Java?
easy
A. int maxSoFar = 0, maxEndingHere = 0;
B. int maxSoFar = 0, maxEndingHere = Integer.MAX_VALUE;
C. int maxSoFar = Integer.MIN_VALUE, maxEndingHere = 0;
D. int maxSoFar = Integer.MAX_VALUE, maxEndingHere = Integer.MIN_VALUE;
Solution
Step 1: Identify correct initial values for Kadane's variables
maxSoFar should start at the smallest integer to handle all negative arrays; maxEndingHere starts at 0 to accumulate sums.
Step 2: Check each option's initialization
int maxSoFar = Integer.MIN_VALUE, maxEndingHere = 0; correctly sets maxSoFar to Integer.MIN_VALUE and maxEndingHere to 0, which is standard practice.
Final Answer:
int maxSoFar = Integer.MIN_VALUE, maxEndingHere = 0; -> Option C
Quick Check:
Initialize maxSoFar low, maxEndingHere zero [OK]
Hint: Start maxSoFar at smallest int, maxEndingHere at zero [OK]
Common Mistakes:
Initializing maxSoFar to 0 causes errors with all negative arrays
Swapping maxSoFar and maxEndingHere initial values
Using Integer.MAX_VALUE incorrectly
3. What is the output of the following Java code using Kadane's Algorithm?
int[] arr = {-2, 1, -3, 4, -1, 2, 1, -5, 4};
int maxSoFar = Integer.MIN_VALUE, maxEndingHere = 0;
for (int num : arr) {
maxEndingHere += num;
if (maxSoFar < maxEndingHere) maxSoFar = maxEndingHere;
if (maxEndingHere < 0) maxEndingHere = 0;
}
System.out.println(maxSoFar);
The maximum sum recorded is 6, but check carefully: At step adding 1 after 2, maxEndingHere = 6, maxSoFar = 6 At last step, maxEndingHere = 5, maxSoFar remains 6 Wait, re-check: Actually, after adding 1 (step 7), maxEndingHere = 6 Then adding -5 (step 8), maxEndingHere = 1 Then adding 4 (step 9), maxEndingHere = 5 So maxSoFar = 6
Correction:
Re-examining the sums, the maximum subarray is [4, -1, 2, 1] which sums to 6, but the subarray [4, -1, 2, 1] sums to 6, so 6 is correct. However, the standard Kadane's algorithm for this array returns 6, but the known maximum subarray sum is 6. But the options include 7, which is incorrect. Therefore, the original answer C (6) is correct.
Final Answer:
6 -> Option A
Quick Check:
Max subarray sum = 6 [OK]
Hint: Add and reset sum; track max sum found [OK]
Common Mistakes:
Forgetting to reset maxEndingHere when negative
Miscounting sums during iteration
Confusing maxSoFar with maxEndingHere
4. Identify the bug in this Kadane's Algorithm Java code snippet:
int maxSoFar = 0, maxEndingHere = 0;
for (int num : arr) {
maxEndingHere = Math.max(num, maxEndingHere + num);
maxSoFar = Math.max(maxSoFar, maxEndingHere);
}
System.out.println(maxSoFar);
medium
A. maxEndingHere should be initialized to Integer.MAX_VALUE
B. maxSoFar should start at Integer.MIN_VALUE, not 0
C. The loop should start from index 1, not 0
D. Using Math.max is incorrect for Kadane's Algorithm
Solution
Step 1: Analyze initialization of maxSoFar
Starting maxSoFar at 0 causes incorrect results if all numbers are negative, as maxSoFar will never update to a negative max subarray.
Step 2: Correct initialization for negative arrays
maxSoFar should be initialized to Integer.MIN_VALUE to correctly track maximum sums even if all are negative.
Final Answer:
maxSoFar should start at Integer.MIN_VALUE, not 0 -> Option B
Quick Check:
Initialize maxSoFar low to handle negatives [OK]
Hint: Initialize maxSoFar to smallest int to handle negatives [OK]
Common Mistakes:
Initializing maxSoFar to 0 causes wrong max for negative arrays
Misunderstanding Math.max usage in Kadane's
Incorrect loop indexing assumptions
5. Given an array int[] arr = {-1, -2, -3, -4}, what will Kadane's Algorithm return as the maximum subarray sum if initialized with maxSoFar = Integer.MIN_VALUE and maxEndingHere = 0?
hard
A. -1
B. 0
C. -10
D. 4
Solution
Step 1: Trace Kadane's Algorithm on all negative array
maxEndingHere resets to 0 when negative, but maxSoFar tracks max subarray sum: - Add -1: maxEndingHere = -1 (reset to 0), maxSoFar = -1 - Add -2: maxEndingHere = -2 (reset to 0), maxSoFar = -1 - Add -3: maxEndingHere = -3 (reset to 0), maxSoFar = -1 - Add -4: maxEndingHere = -4 (reset to 0), maxSoFar = -1
Step 2: Identify maximum subarray sum
The maximum subarray sum is -1, the largest single element in the array.
Final Answer:
-1 -> Option A
Quick Check:
Max subarray sum in negatives = max single element [OK]
Hint: Max sum in all negatives is largest single element [OK]
Common Mistakes:
Assuming max sum is 0 due to resets
Summing all negatives incorrectly
Ignoring initialization of maxSoFar
Recommended
Ready to prove it?
Pass the test and this pattern moves unknownstrongwhile earning +1 Grip toward your certificate.