如何解决计算“最多 K”和“最多 K-1”的值以获得“等于 K”的答案的直觉
我正在尝试解决一个 algorithm problem:
给定一个正整数数组 nums
,如果该子数组中不同整数的数量正好是 nums
.例如,k
有 [1,2,3,1,2]
个不同的整数:3
、1
和 2
。返回 3
的好子数组的数量。
nums
我了解 class Solution {
public:
int helper(vector<int>& nums,int B) {
unordered_map<int,int> m;
int start=0,end=0,count=0;
while(end<nums.size()) {
m[nums[end]]++;
while(m.size()>B) {
m[nums[start]]--;
if(m[nums[start]]<=0) m.erase(nums[start]);
start++;
}
count+=(end-start+1);
end++;
}
return count;
}
int subarraysWithKdistinct(vector<int>& nums,int k) {
return helper(nums,k)-helper(nums,k-1);
}
};
函数的工作原理,但不了解使用 atmost helper()
和 {{1} 计算子数组数量背后的直觉} 不同的整数并减去它们(即,在 k
后面)以获得 恰好等于 k 个不同整数的子数组的数量。
有人可以提供一个直观的解释吗?
解决方法
我了解 helper() 函数的工作原理,但不了解计算最多具有 k 和 k-1 个不同整数的子数组数量并减去它们的直觉(即,在 helper(nums,k)-helper(nums,k -1)) 得到恰好等于 k 个不同整数的子数组的个数。
好吧,假设您有一个房间,里面有一群孩子。原来五岁以下的孩子有12个,四岁以下的孩子有8个。
现在想必您同意“四岁或以下的儿童”中的每一个也是“五岁或以下的儿童”中的一个,对吗?
因此,假设我们选取 12 个 5 岁或以下的孩子,从中取出 8 个 4 岁或以下的孩子。当然,还有 12 - 8 = 4 个孩子。
现在,这些孩子每个人多大了?
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。