微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

计算“最多 K”和“最多 K-1”的值以获得“等于 K”的答案的直觉

如何解决计算“最多 K”和“最多 K-1”的值以获得“等于 K”的答案的直觉

我正在尝试解决一个 algorithm problem

给定一个正整数数组 nums,如果该子数组中不同整数的数量正好是 nums .例如,k[1,2,3,1,2] 个不同的整数:312。返回 3 的好子数组的数量

查看解决方here,我提出了以下滑动窗口方法

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 举报,一经查实,本站将立刻删除。