int countTriangles(vector<int>& arr) {
// code here
int count = 0;
sort(arr.begin(), arr.end());
for(int i=2; i<arr.size(); i++) {
int j=0, k=i-1;
while(j<k) {
if(arr[j]+arr[k] > arr[i]) {
count += k-j;
k--;
} else {
j++;
}
}
}
return count;
}
Month: January 2025
GFG PTOD | 07 Jan 2025 | Pair with given sum in a sorted array
int countPairs(vector<int> &arr, int target) {
// Complete the function
int count = 0, i=0, j=arr.size()-1;
while(i<j) {
int sum = arr[i] + arr[j];
if(sum < target) i++;
else if(sum > target) j--;
else {
int el1 = arr[i], el2=arr[j];
int ci = 0, cj=0;
while(arr[i] == el1 && i<=j) ci++, i++;
while(arr[j] == el2 && i<=j) cj++, j--;
if(el1 == el2) count += ci*(ci-1)/2;
else count += ci*cj;
}
}
return count;
}
GFG PTOD | 06 Jan 2025 | Sum Pair closest to target
vector<int> sumClosest(vector<int>& arr, int target) {
// code here
sort(arr.begin(), arr.end());
int diff = INT_MAX, i=0, j=arr.size()-1;
vector<int> res;
while(i<j) {
int sum = arr[i] + arr[j];
if(abs(sum-target) < diff) {
diff = abs(sum-target);
res={arr[i], arr[j]};
}
if(sum < target) i++;
else j--;
}
return res;
}
GFG PTOD | 05 Jan 2025 | Count Pairs whose sum is less than target
int countPairs(vector<int> &arr, int target) {
// Your code here
sort(arr.begin(), arr.end());
int count=0, l=0, r=arr.size()-1;
while(l<r) {
int sum = arr[l]+arr[r];
if(sum < target) {
count += r-l;
l++;
} else {
r--;
}
}
return count;
}
GFG PTOD | 04 Jan 2025 | Count all triplets with given sum in sorted array
int countTriplets(vector<int> &arr, int target) {
// Code Here
int count = 0;
int n = arr.size();
for(int i=0; i<n-2; i++) {
int j = i+1, k=n-1;
while(j<k) {
int sum = arr[i] + arr[j] + arr[k];
if(sum < target) j++;
else if(sum > target) k--;
else if(sum == target) {
count++;
int temp = j+1;
while(arr[temp] == arr[temp-1] && temp<k) {
count++;
temp++;
}
k--;
}
}
}
return count;
}
GFG PTOD | 03 Jan 2025 | Count Subarrays with given XOR
long subarrayXor(vector<int> &arr, int k) {
// code here
int ans = 0, prefixXor = 0;
unordered_map<int, int> mp;
for(int i=0; i<arr.size(); i++) {
prefixXor ^= arr[i];
if(mp.find(prefixXor^k) != mp.end())
ans += mp[prefixXor^k];
if(prefixXor == k)
ans++;
mp[prefixXor]++;
}
return ans;
}
GFG PTOD | 02 Jan 2025 | Subarrays with sum K
int countSubarrays(vector<int> &arr, int k) {
// code here
unordered_map<int, int> map;
int count = 0, sum = 0;
for(int i=0; i<arr.size(); i++) {
sum+= arr[i];
if(sum==k) count++;
if(map.find(sum-k) != map.end()) count+=map[sum-k];
map[sum]++;
}
return count;
}
GFG PTOD | 01 Jan 2025 | Problem Solved Successfully
vector<vector<string>> anagrams(vector<string>& arr) {
// code here
vector<vector<string>> ret;
unordered_map<string, vector<string>> anagrams;
for(int i=0; i<arr.size(); i++) {
string key = arr[i];
sort(key.begin(), key.end());
anagrams[key].push_back(arr[i]);
}
for(auto x:anagrams) {
ret.push_back(x.second);
}
return ret;
}