码农知识堂 - 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
  • 相关阅读:
    linux常用命令-1
    编程技巧│浏览器 Notification 桌面推送通知
    【无公网IP】安装Wnmp并结合内网穿透,实现灵活可靠的外网访问内网服务!
    Unity中Shader的XRay透视效果
    交换机与路由技术-15-链路聚合
    第 45 届国际大学生程序设计竞赛(ICPC)亚洲区域赛(昆明),签到题4题
    【计算机网络】计算机网络中的一些基本概念
    自动驾驶感知算法实战13——自动驾驶感知未来发展方向分享
    SpringBoot使用git-commit-id-maven-plugin打包
    CTFshow web(文件上传158-161)
  • 原文地址:https://blog.csdn.net/qq_39906884/article/details/126207069
  • 最新文章
  • 【JVM】编译执行与解释执行的区别是什么?JVM 使用哪种方式?
    用 Hashids 优雅解决 C 端自增 ID 暴露问题
    V8引擎 精品漫游指南--Ignition篇(上) 指令 栈帧 槽位 调用约定 内存布局 基础内容
    LLVM Pass快速入门(四):代码插桩
    milkup:桌面端 markdown AI续写和即时渲染
    基于项目工程构建SBOM(软件物料清单)的研究
    鸿蒙应用开发UI基础第二节:鸿蒙应用程序框架核心解析与实操
    .NET 中如何快速实现 List 集合去重?
    扣子Coze实战:从0到1打造抖音+小红书热点监控智能体
    浅谈数据访问层
  • 热门文章
  • 十款代码表白小特效 一个比一个浪漫 赶紧收藏起来吧!!!
    奉劝各位学弟学妹们,该打造你的技术影响力了!
    五年了,我在 CSDN 的两个一百万。
    Java俄罗斯方块,老程序员花了一个周末,连接中学年代!
    面试官都震惊,你这网络基础可以啊!
    你真的会用百度吗?我不信 — 那些不为人知的搜索引擎语法
    心情不好的时候,用 Python 画棵樱花树送给自己吧
    通宵一晚做出来的一款类似CS的第一人称射击游戏Demo!原来做游戏也不是很难,连憨憨学妹都学会了!
    13 万字 C 语言从入门到精通保姆级教程2021 年版
    10行代码集2000张美女图,Python爬虫120例,再上征途
小工具 小游戏
Copyright © 2022 侵权请联系2656653265@qq.com    京ICP备2022015340号-1

京公网安备 11010502049817号