πDay 2. Count Pairs whose sum is less than target π§
The problem can be found at the following link: Problem Link
π‘ Problem Description:
You are given an array arr[] of integers and a target integer. Your task is to find the number of pairs in the array whose sum is strictly less than the given target.
π Example Walkthrough:
Input:
arr[] = [7, 2, 5, 3], target = 8
Output:
2
Explanation:
There are 2 pairs with sum less than 8: (2, 5) and (2, 3).
Input:
arr[] = [5, 2, 3, 2, 4, 1], target = 5
Output:
4
Explanation:
There are 4 pairs whose sum is less than 5: (2, 2), (2, 1), (3, 1), and (2, 1).
Input:
arr[] = [2, 1, 8, 3, 4, 7, 6, 5], target = 7
Output:
6
Explanation:
There are 6 pairs whose sum is less than 7: (2, 1), (2, 3), (2, 4), (1, 3), (1, 4), and (1, 5).
Constraints:
$
1 <= arr.size() <= 10^5$$
0 <= arr[i] <= 10^4$$
1 <= target <= 10^4$
π― My Approach:
Sorting and Two Pointers Technique: We can efficiently solve this problem using a two-pointer approach. By sorting the array first, we can use two pointers: one at the start of the array (
l) and one at the end (r). We then check if the sum of the elements at these pointers is less than the target.If the sum of
arr[l]andarr[r]is less than the target, all pairs formed byarr[l]with any element betweenlandrwill also be valid. Hence, we can add(r - l)to our result and move the left pointer (l) to the right.If the sum is greater than or equal to the target, we move the right pointer (
r) to the left.
Steps:
Sort the array.
Use two pointers:
l = 0andr = arr.size() - 1.Traverse the array while
l < rand check ifarr[l] + arr[r] < target.Adjust the pointers accordingly and count the pairs.
π Time and Auxiliary Space Complexity
Expected Time Complexity: O(n log n), where
nis the number of elements in the array. This comes from the sorting step, and the two-pointer traversal takes O(n) time.Expected Auxiliary Space Complexity: O(1), as we only use a constant amount of extra space (for the two pointers and the result variable).
π Solution Code
Code (C++)
class Solution {
public:
int countPairs(vector<int>& arr, int target) {
sort(arr.begin(), arr.end());
int l = 0, r = arr.size() - 1, ans = 0;
while (l < r) (arr[l] + arr[r] < target) ? ans += (r - l), l++ : r--;
return ans;
}
};Code (Java)
class Solution {
int countPairs(int[] arr, int target) {
Arrays.sort(arr);
int l = 0, r = arr.length - 1, ans = 0;
while (l < r) if (arr[l] + arr[r] < target) ans += (r - l++);
else r--;
return ans;
}
}Code (Python)
class Solution:
def countPairs(self, arr, target):
arr.sort()
l, r, ans = 0, len(arr) - 1, 0
while l < r:
if arr[l] + arr[r] < target: ans += (r - l); l += 1
else: r -= 1
return ansπ― Contribution and Support:
For discussions, questions, or doubts related to this solution, feel free to connect on LinkedIn: Any Questions. Letβs make this learning journey more collaborative!
β If you find this helpful, please give this repository a star! β
πVisitor Count
Last updated