Step-by-Step Beginner-Friendly Solution: Longest Subarray with Given Sum (k)
Understanding the Problem
We are given an array of positive integers and a target value k
. Our task is to find the longest contiguous subarray whose elements sum up exactly to k
.
Let’s break this down:
- A subarray is a part of the array with consecutive elements.
- We are not interested in all such subarrays — only the one that has the maximum length and whose total sum is
k
.
Example to Understand
arr = [1, 2, 3, 1, 1, 1, 4, 2, 3], k = 6
Let’s walk through this manually:
- [1, 2, 3] → sum = 6 → valid, length = 3
- [1, 1, 1, 1, 2] → sum = 6 → valid, length = 5
- [4, 2] → sum = 6 → valid, length = 2
So, the longest subarray with sum = 6 is length 5.
How Can We Solve This Efficiently?
We use a powerful technique called the sliding window, which is ideal when all array elements are positive.
Why Sliding Window Works for Positive Numbers
When elements are positive:
- Adding more elements to the window increases the sum.
- To reduce the sum, we can safely remove elements from the beginning of the window.
Approach: Sliding Window Algorithm
- Initialize two pointers
start
and end
at index 0.
- Maintain a variable
curr_sum
to store the current sum of the window.
- Also keep track of
max_len
to record the maximum length of a valid subarray found so far.
Edge Cases: What Happens Then?
- No Valid Subarray:
max_len
remains 0.
- Empty Array: Nothing to process, so return 0.
- Single Element Equals k: Return 1 as that single element forms the subarray.
- Target Sum is 0: With all elements positive, we cannot reach a sum of 0, so return 0.
This solution is very efficient. It visits each element at most twice — once when expanding the window and once when shrinking it — giving it a time complexity of O(n)
.
Note: This technique only works when all elements in the array are positive. If negative numbers are allowed, we’ll need a different approach such as prefix sums with a hashmap.
Comments
Loading comments...