Leetcode 362. 敲击计数器(DAY 178)---- 二分查找学习期

拼搏现实的明天。 2022-09-13 14:29 392阅读 0赞

文章目录

    • 原题题目
    • 代码实现(首刷自解)

原题题目


在这里插入图片描述


代码实现(首刷自解)


  1. class HitCounter {
  2. public:
  3. vector<pair<int,int>> v;
  4. HitCounter(){ }
  5. int my_higher_bound(vector<pair<int,int>>& v,int target)
  6. {
  7. int left = 0,right = v.size();
  8. while(left < right)
  9. {
  10. int mid = (left + right)/2;
  11. if(v[mid].first > target) right = mid;
  12. else left = mid+1;
  13. }
  14. return left;
  15. }
  16. void hit(int timestamp)
  17. {
  18. if(v.size() && timestamp == v.back().first)
  19. ++v.back().second;
  20. else
  21. {
  22. if(v.size()) v.emplace_back(timestamp,v.back().second + 1);
  23. else v.emplace_back(timestamp,1);
  24. }
  25. }
  26. int getHits(int timestamp)
  27. {
  28. int higher_pos = my_higher_bound(v,timestamp) - 1;
  29. int lower_pos = my_higher_bound(v,timestamp-300) - 1;
  30. if(higher_pos < 0) return 0;
  31. int ret = v[higher_pos].second - ((lower_pos < 0) ? 0 : v[lower_pos].second);
  32. return ret;
  33. }
  34. };
  35. /** * Your HitCounter object will be instantiated and called as such: * HitCounter* obj = new HitCounter(); * obj->hit(timestamp); * int param_2 = obj->getHits(timestamp); */

发表评论

表情:
评论列表 (有 0 条评论,392人围观)

还没有评论,来说两句吧...

相关阅读