码农知识堂 - 1000bd
  •   Python
  •   PHP
  •   JS/TS
  •   JAVA
  •   C/C++
  •   C#
  •   GO
  •   Kotlin
  •   Swift
  • 【力扣每日一题】2023.9.28 花期内花的数目


    目录

    题目:

    示例:

    分析:

    代码:


    题目:

    示例:

    分析:

    给我们一个二维数组来表示花期,在一段花期之内花是开的。另外给我们一个一维数组表示来人的时间,要我们返回一个一维数组,第i个元素表示第i个人来时在花期内的花。

    我们可以直接统计出在不同时间时,在花期内的花的数量,然后依次按照每个人来时的时间来获取花的数量。

    不过题目有给出数据范围,花期的时间间隔最多为10的9次方,那么我们上述暴力做法一定是会超时的。

    我们来分析分析能不能优化一下,先看看按照上述做法得出的所有时间中在花期内的花的数目。

    当完整的查找表在我们面前时我们就可以发现,实际上很多相邻的时间点的开花数是一样的,我们把第一个与相邻时间点不一样的时间节点提取出来。

    把重复元素剔除,剩下的时间点都有一个共同点,假设花期的范围是【i,j】,那么 i 和 j + 1 必然在这些特殊时间点中(最开头的1除外)。

    这个也不难理解,因为 i 时花开了,所以花的数目自然是增加的。j 时花谢了,所以在 j + 1时,花的数目就减少了。

    因此我们只需要记录下关键节点的花的数目就可以了。

    我们这边记录这种离散的键值对,所以我们用map来记录。

    接着遍历所有来的人,根据来的人的时间,我们按照顺序去寻找在map中,键第一个大于来的人的时间的键值对。

    例如下图:

    如果此时有人在时间为11时来的,那么我们找到的第一个大于来的人的时间的键值对是时间为13的,我们需要将找到的键值对再回退一格,回退一格之后的键值对的值才是来人时花开的数目。

    找到之后做个判断,如果找到的是第一个元素,那么是无法回退的,所以在这个时间点时的花的数目就是0。

    代码:

    1. class Solution {
    2. public:
    3. vector<int> fullBloomFlowers(vectorint>>& flowers, vector<int>& people) {
    4. map<int,int>m;
    5. int n=people.size();
    6. int temp=0;
    7. //对花期的节点做相应的标记
    8. for(auto& f:flowers){
    9. ++m[f[0]];--m[f[1]+1];
    10. }
    11. //统计出在不同节点时,花的数目
    12. for(auto& a:m){
    13. temp+=a.second;
    14. m[a.first]=temp;
    15. }
    16. vector<int>res(n,0);
    17. //找出离 来人时最近的时间节点 的花的数目
    18. for(int i=0;i
    19. auto it = m.upper_bound(people[i]);
    20. if (it == m.begin()) continue;
    21. res[i] = (--it)->second;
    22. }
    23. return res;
    24. }
    25. };

  • 相关阅读:
    AI算法平台及视频智能分析系统在高速公路场景中的智能化应用
    冠达管理:打新股的风险有多大?
    软件设计思想
    基于不同监督强度分类的语义分割综述:A Breif Survey on Semantic Segmentation with Deep Learning
    关于#python#的问题:二维数组去重保留最后一行满足条件的数据(相关搜索:数组去重)
    基于springboot+vue的大学生科创项目在线管理系统
    关于 passing ‘const xx’ as ‘this’ argument of 的错误
    文件的四次上传
    ElementUI的el-tree实现懒加载查询和直接全部查询出来
    Qlib股票数据获取与查看(Qlib学习1)
  • 原文地址:https://blog.csdn.net/m0_63235356/article/details/133381580
  • 最新文章
  • 攻防演习之三天拿下官网站群
    数据安全治理学习——前期安全规划和安全管理体系建设
    企业安全 | 企业内一次钓鱼演练准备过程
    内网渗透测试 | Kerberos协议及其部分攻击手法
    0day的产生 | 不懂代码的"代码审计"
    安装scrcpy-client模块av模块异常,环境问题解决方案
    leetcode hot100【LeetCode 279. 完全平方数】java实现
    OpenWrt下安装Mosquitto
    AnatoMask论文汇总
    【AI日记】24.11.01 LangChain、openai api和github copilot
  • 热门文章
  • 十款代码表白小特效 一个比一个浪漫 赶紧收藏起来吧!!!
    奉劝各位学弟学妹们,该打造你的技术影响力了!
    五年了,我在 CSDN 的两个一百万。
    Java俄罗斯方块,老程序员花了一个周末,连接中学年代!
    面试官都震惊,你这网络基础可以啊!
    你真的会用百度吗?我不信 — 那些不为人知的搜索引擎语法
    心情不好的时候,用 Python 画棵樱花树送给自己吧
    通宵一晚做出来的一款类似CS的第一人称射击游戏Demo!原来做游戏也不是很难,连憨憨学妹都学会了!
    13 万字 C 语言从入门到精通保姆级教程2021 年版
    10行代码集2000张美女图,Python爬虫120例,再上征途
Copyright © 2022 侵权请联系2656653265@qq.com    京ICP备2022015340号-1
正则表达式工具 cron表达式工具 密码生成工具

京公网安备 11010502049817号