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 startandendat index 0.
- Maintain a variable curr_sumto store the current sum of the window.
- Also keep track of max_lento record the maximum length of a valid subarray found so far.
Edge Cases: What Happens Then?
  - No Valid Subarray: max_lenremains 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...