码农知识堂 - 1000bd
  •   Python
  •   PHP
  •   JS/TS
  •   JAVA
  •   C/C++
  •   C#
  •   GO
  •   Kotlin
  •   Swift
  • [LeetCode84双周赛] [模拟] 6174. 任务调度器 II,[贪心&数学] 6144. 将数组排序的最少替换次数


    LeetCode 6174. 任务调度器 II

    https://leetcode.cn/problems/task-scheduler-ii/
    这道题一开始我模拟做,超时了😂,参考别人的题解,发现一些步骤上可以简化的。

    版本 1

    class Solution {
    public:
        long long taskSchedulerII(vector<int>& tasks, int space) {
            unordered_map<int, long long> hash;
            long long ans = 0;
            
            for (auto & x : tasks) {
    	       // 若没有做过同一类型的任务,或者中间间隔天数满足 space,ans 结果加一天
               if (hash[x] == 0 || ans - hash[x] > space) { 
                   ans++;
               // 否则,将 ans 赋值为上一次同一类型的任务的日子 + space 时间间隔 + 1
               } else {
                   ans = hash[x] + space + 1;
               }
               // 最后将该类型任务日子变为当前的 ans 的日子
               hash[x] = ans;
            }
            return ans;
        }
    };
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20

    版本 2

    class Solution {
    public:
        long long taskSchedulerII(vector<int>& tasks, int space) {
            unordered_map<int, long long> hash;
            long long ans = 0;
            
            for (auto & x : tasks) {
                ans++;  // 完成该任务,天数+1
                if (hash[x] != 0) {
                    ans = max(ans, hash[x] + space + 1);  // 看看是否要间隔 space 天
                }
                hash[x] = ans; // 记录完成任务的时间
            }  
            return ans;
        }
    };
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16

    LeetCode 6144. 将数组排序的最少替换次数

    https://leetcode.cn/problems/minimum-replacements-to-sort-the-array/
    因为最后的数组要满足递增,所以最后一个不要拆!如果最后一个拆了,前面拆的次数也会变多。

    从后往前遍历,维护拆完后的数组中的最小值 minValue,
    若 nums[i] > minValue,对 nums[i] 进行拆分,怎么拆?

    • 拆出来的最大值 >= minValue
    • 拆出来地最小份数 k = ⌈ n u m s [ i ] m i n V a l u e ⌉ \lceil \frac{nums[i]}{minValue} \rceil ⌈minValuenums[i]​⌉,拆的次数为 k - 1
    • 拆出来的最小值要尽可能地大,这样前面的数拆分也不会太小。其实就是让拆出来的每一份更加均匀,拆出来的最小值 = ⌊ n u m s [ i ] k ⌋ \lfloor \frac{nums[i]}{k} \rfloor ⌊knums[i]​⌋
    class Solution:
        def minimumReplacement(self, nums: List[int]) -> int:
            ans = 0
            minValue = nums[-1] # 最后一个不用拆
    
            for x in nums[-2::-1]: # 从倒数第二个开始遍历
                if x > minValue:
                    k = ceil(x / minValue) # 上取整
                    ans += k - 1
                    minValue = x // k
                else:
                    minValue = x
            
            return ans
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
  • 相关阅读:
    inf和nan
    【vue2第十一章】v-model的原理详解 与 如何使用v-model对父子组件的value绑定 和修饰符.sync
    21.Spring Cloud Gateway 简介
    《数据结构》(六)八大排序(下)
    【C++】STL之适配器---用deque实现栈和队列
    入行测试一年半的心得体会
    立创EDA——PCB的布局(四)
    【Web APIs】JavaScript 事件基础 ② ( “ 事件 “ 开发步骤 | 常见鼠标 “ 事件 “ )
    如何做到一套FPGA工程无缝兼容两款不同的板卡?
    AJAX基于XML的数据交换、XML和JSON的区别
  • 原文地址:https://blog.csdn.net/qq_39906884/article/details/126207069
  • 最新文章
  • 攻防演习之三天拿下官网站群
    数据安全治理学习——前期安全规划和安全管理体系建设
    企业安全 | 企业内一次钓鱼演练准备过程
    内网渗透测试 | 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号