Skip to content

Instantly share code, notes, and snippets.

Show Gist options
  • Save SuryaPratapK/5ee9d5434bfe56d4dc300ceb7d85bf73 to your computer and use it in GitHub Desktop.
Save SuryaPratapK/5ee9d5434bfe56d4dc300ceb7d85bf73 to your computer and use it in GitHub Desktop.
class Solution {
using ll = long long;
public:
long long countGood(vector<int>& nums, int k) {
ll n = nums.size();
ll left = 0, right = 0;
ll good_subarrays = 0;
unordered_map<ll,ll> freq;
ll equal_pairs = 0;
while(left<n){
while(right<n and equal_pairs<k){
freq[nums[right]]++;
if(freq[nums[right]]>=2)
equal_pairs += freq[nums[right]]-1;
right++;
}
if(equal_pairs>=k)
good_subarrays += n-right+1;
//Remove left item
freq[nums[left]]--;
if(freq[nums[left]]>0)
equal_pairs -= freq[nums[left]];
left++;
}
return good_subarrays;
}
};
/*
//JAVA
import java.util.HashMap;
class Solution {
public long countGood(int[] nums, int k) {
long n = nums.length;
long left = 0, right = 0;
long good_subarrays = 0;
HashMap<Long, Long> freq = new HashMap<>();
long equal_pairs = 0;
while (left < n) {
while (right < n && equal_pairs < k) {
long num = nums[(int)right];
freq.put(num, freq.getOrDefault(num, 0L) + 1);
if (freq.get(num) >= 2) {
equal_pairs += freq.get(num) - 1;
}
right++;
}
if (equal_pairs >= k) {
good_subarrays += n - right + 1;
}
// Remove left item
long leftNum = nums[(int)left];
freq.put(leftNum, freq.get(leftNum) - 1);
if (freq.get(leftNum) > 0) {
equal_pairs -= freq.get(leftNum);
}
left++;
}
return good_subarrays;
}
}
#Python
from collections import defaultdict
class Solution:
def countGood(self, nums: List[int], k: int) -> int:
n = len(nums)
left = 0
right = 0
good_subarrays = 0
freq = defaultdict(int)
equal_pairs = 0
while left < n:
while right < n and equal_pairs < k:
freq[nums[right]] += 1
if freq[nums[right]] >= 2:
equal_pairs += freq[nums[right]] - 1
right += 1
if equal_pairs >= k:
good_subarrays += n - right + 1
# Remove left item
freq[nums[left]] -= 1
if freq[nums[left]] > 0:
equal_pairs -= freq[nums[left]]
left += 1
return good_subarrays
*/
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment