当前位置:   article > 正文

哈希表+前缀和

哈希表+前缀和

适用情况:求满足一定性质的数组区间(或者是树的路径),此时因为数组中有正有负,不能使用滑动窗口

板子:

  1. #include<iostream>
  2. #include<unordered_map>
  3. int hashsum(vector<int> &nums,int k){
  4. unordered_map<int,int> m;//用来存储前面出现的前缀和
  5. m.insert({0,1});//初始化一个前缀和为0的数
  6. int count=0,pre=0;
  7. for(auto &x:nums){
  8. pre+=x;
  9. if(m.find(pre-k)!=m.end()){//因为pre+x=k,所以我们要查询前面有多少个pre-k的组合
  10. count+=m[pre-k];
  11. }
  12. m[pre]++;
  13. }
  14. return count;
  15. }

复杂度分析:

时间空间都为O(n)

例题:

剑指II 10,50;

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/2023面试高手/article/detail/558102
推荐阅读
相关标签
  

闽ICP备14008679号