码农知识堂 - 1000bd
  •   Python
  •   PHP
  •   JS/TS
  •   JAVA
  •   C/C++
  •   C#
  •   GO
  •   Kotlin
  •   Swift
  • LeetCode 2578. 最小和分割:贪心(数学)


    【LetMeFly】2578.最小和分割:贪心(数学)

    力扣题目链接:https://leetcode.cn/problems/split-with-minimum-sum/

    给你一个正整数 num ,请你将它分割成两个非负整数 num1 和 num2 ,满足:

    • num1 和 num2 直接连起来,得到 num 各数位的一个排列。
      • 换句话说,num1 和 num2 中所有数字出现的次数之和等于 num 中所有数字出现的次数。
    • num1 和 num2 可以包含前导 0 。
      • 1
      • 2
      • 3
      • 4
      • 5

    请你返回 num1 和 num2 可以得到的和的 最小 值。

    注意:

    • num 保证没有前导 0 。
    • num1 和 num2 中数位顺序可以与 num 中数位顺序不同。

     

    示例 1:

    输入:num = 4325
    输出:59
    解释:我们可以将 4325 分割成 num1 
    = 24 和 num2 =
    35 ,和为 59 ,59 是最小和。

        示例 2:

        输入:num = 687
        输出:75
        解释:我们可以将 687 分割成 num1
        = 68 和 num2
        = 7 ,和为最优值 75 。

             

            提示:

            • 10 <= num <= 109

            方法一:贪心(数学)

            先说结论:将给定数字转为字符串后将其中字符从小到大排序,然后依次分配给两个新数字即可。

            不严谨的原理描述:

            • 越高位数字尽量越小,因此要从小到大排序
            • 最终返回的是两数之和,所以首先位数越小越好,因此尽可能两个数字长度相等
            • 若两个数长度不相等,更长的那个数字的最高位要尽可能小(例如将23456分成246和35,唯一的百位是最小的2)

            结论中描述的分法恰好满足。

            • 时间复杂度 O ( k log ⁡ k ) O(k\log k) O(klogk),其中 k = log ⁡ n u m k = \log num k=lognum
            • 空间复杂度 O ( log ⁡ k ) O(\log k) O(logk)

            AC代码

            C++
            class Solution {
            public:
                int splitNum(int num) {
                    string s = to_string(num);
                    sort(s.begin(), s.end());
                    string n1, n2;
                    for (int i = 0; i < s.size(); i++) {
                        (i % 2 ? n2 : n1) += s[i];
                    }
                    // cout << "n1: " << n1 << ", n2: " << n2 << endl;  //**********
                    return atoi(n1.c_str()) + atoi(n2.c_str());
                }
            };
            
            • 1
            • 2
            • 3
            • 4
            • 5
            • 6
            • 7
            • 8
            • 9
            • 10
            • 11
            • 12
            • 13
            Python
            class Solution:
                def splitNum(self, num: int) -> int:
                    s = sorted(str(num))
                    n = ['', '']
                    for i in range(len(s)):
                        n[i % 2] += s[i]
                    return int(n[0]) + int(n[1])
            
            • 1
            • 2
            • 3
            • 4
            • 5
            • 6
            • 7

            同步发文于CSDN,原创不易,转载经作者同意后请附上原文链接哦~
            Tisfy:https://letmefly.blog.csdn.net/article/details/133694187

          • 相关阅读:
            LeetCode——字符串(Java)
            PL2303串口不支持WINDOWS11解决方法
            1021 Deepest Root
            非零基础自学Java (老师:韩顺平) 第5章 程序控制结构 5.8 while循环控制 && 5.9 do..while循环控制
            从头学前端-HTML简介
            React函数式写法和类式写法的区别(以一个计数器功能为例子)
            数据结构与算法训练:第二十二弹
            剖析虚幻渲染体系(16)- 图形驱动的秘密
            SQL数据库添加新账号,只操作指定数据库
            ### Cause: java.sql.SQLRecoverableException: 无法从套接字读取更多的数据
          • 原文地址:https://blog.csdn.net/Tisfy/article/details/133694187
          • 最新文章
          • 攻防演习之三天拿下官网站群
            数据安全治理学习——前期安全规划和安全管理体系建设
            企业安全 | 企业内一次钓鱼演练准备过程
            内网渗透测试 | 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号