【力扣】2578. 最小和分割

2023-10-09 21:15
文章标签 力扣 分割 最小 2578

本文主要是介绍【力扣】2578. 最小和分割,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

【力扣】2578. 最小和分割

文章目录

  • 【力扣】2578. 最小和分割
    • 1. 题目介绍
    • 2. 思路
    • 3. 解题代码
    • 4. 疑问?
    • 5. Danger
    • 参考

1. 题目介绍

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

  • num1 和 num2 直接连起来,得到 num 各数位的一个排列。

换句话说,num1 和 num2 中所有数字出现的次数之和等于 num 中所有数字出现的次数。

  • num1 和 num2 可以包含前导 0 。
  • 请你返回 num1 和 num2 可以得到的和的 最小值

注意:

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

示例:
在这里插入图片描述
在这里插入图片描述

2. 思路

  • 1)对数字数位分割,得到 list 后排序,两个数字分别:

    • 你一位,我一位的拿。
    • 有0的话,固定放在第二位
  • 2)当我们将给定的 num 分成 num1 和 num2 时,num1 中的数字应该是单调递增的。否则,例如 nums1=1243,我们将 4 和 3 交换可以得到更小的值。同理,nums2 中的数字也应该是单调递增的。

    • 接下来我们考虑 num1 和 num2 之间的情况。设 num1 中有一个数字 xxx 是从低到高的第 p (p≥0) 位,表示 x×10p,num2 中有一个数字 y 是从低到高的低 q 位,表示 y×10q。我们交换 x 和 y,不应该得到更小的值,因此有:
      x×10p+y×10q≤x×10q+y×10p,即:(x−y)×(10p−10q)≤0,也就是说:如果 x 的位数更高(即 10p≥10q ,那么 x 必须不能大于 y);如果 y 的位数更高,那么 y 必须不能大于 x。
    • 结合之前得出的 num1 和 num2 分别是单调递增的,这就告诉我们:
      任何一个数字,都不能大于任何一个数中比它位数更小的数字。
    • 当 num1 和 num2 位数不相等时,我们需要补上前导零使得它们位数相等。例如,1234 和 5 是满足上述要求的,但 234 和 15 的和显然更小,这是因为我们需要把 5 看成 0005,那么 1234 中的 1 与 0[00]55 中括号部分的两个 0 是不满足要求的。这也就告诉我们,num1 和 num2 的位数差不能超过 1,否则位数少的那个数能补上至少 2 个前导零,其中不是最高位的那些前导零和位数多的那个数的最高位是不满足要求的。

因此,我们就可以得出最小和的分割方法:

  • 将 num 的数字进行递增排序;
  • 按照递增顺序,交替地将数字分配给 num1 和 num2

3. 解题代码

class Solution:def splitNum(self, num: int) -> int:stnum = "".join(sorted(str(num)))num1, num2 = int(stnum[::2]), int(stnum[1::2])return num1 + num2

4. 疑问?

貌似没有对前导0进行限制,比如现在的答案是:

  • 1024 分成:02 和14就行

5. Danger

力扣(LeetCode)是领扣网络旗下专注于程序员技术成长和企业技术人才服务的品牌。源自美国硅谷,力扣为全球程序员提供了专业的IT技术职业化提升平台,有效帮助程序员实现快速进步和长期成长。此外,力扣(LeetCode)致力于解决程序员技术评估、培训、职业匹配的痛点,逐步引领互联网技术求职和招聘迈向专业化。

  • 据了解到的情况,Easy题和Medium 题在面试中比较常见,通常会以手写代码之类的形式出现,您需要对问题进行分析并给出解答,并于面试官进行交流沟通,有时还会被要求分析时间复杂度8与空间复杂度°,面试官会通过您对题目的分析解答,了解您对常用算法的熟悉程度和您的程序实现功底。
  • 而在一些对算法和程序实现功底要求较高的岗位,Hard 题也是很受到面试官的青睐,如果您在面试中成功Bug-Free出一道Hard题,我们相信您一定会给面试官留下很深刻的印象,并极大增加拿到Offer的概率,据相关人士统计,如果您在面试成功解出一道Hard题,拿不到Offer的概率无限接近于0。
  • 所以,力扣中Easy和Medium相当于面试中的常规题,而Hard 则相当于面试中较难的题,解出—道Hard题,Offer可以说是囊中之物。

参考

【1】https://leetcode.cn/problems/split-with-minimum-sum/?envType=daily-question&envId=2023-10-09

这篇关于【力扣】2578. 最小和分割的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/175621

相关文章

使用Python实现批量分割PDF文件

《使用Python实现批量分割PDF文件》这篇文章主要为大家详细介绍了如何使用Python进行批量分割PDF文件功能,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起学习一下... 目录一、架构设计二、代码实现三、批量分割PDF文件四、总结本文将介绍如何使用python进js行批量分割PDF文件的方法

使用Python将长图片分割为若干张小图片

《使用Python将长图片分割为若干张小图片》这篇文章主要为大家详细介绍了如何使用Python将长图片分割为若干张小图片,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起学习一下... 目录1. python需求的任务2. Python代码的实现3. 代码修改的位置4. 运行结果1. Python需求

C#中字符串分割的多种方式

《C#中字符串分割的多种方式》在C#编程语言中,字符串处理是日常开发中不可或缺的一部分,字符串分割是处理文本数据时常用的操作,它允许我们将一个长字符串分解成多个子字符串,本文给大家介绍了C#中字符串分... 目录1. 使用 string.Split2. 使用正则表达式 (Regex.Split)3. 使用

poj 1258 Agri-Net(最小生成树模板代码)

感觉用这题来当模板更适合。 题意就是给你邻接矩阵求最小生成树啦。~ prim代码:效率很高。172k...0ms。 #include<stdio.h>#include<algorithm>using namespace std;const int MaxN = 101;const int INF = 0x3f3f3f3f;int g[MaxN][MaxN];int n

poj 1287 Networking(prim or kruscal最小生成树)

题意给你点与点间距离,求最小生成树。 注意点是,两点之间可能有不同的路,输入的时候选择最小的,和之前有道最短路WA的题目类似。 prim代码: #include<stdio.h>const int MaxN = 51;const int INF = 0x3f3f3f3f;int g[MaxN][MaxN];int P;int prim(){bool vis[MaxN];

poj 2349 Arctic Network uva 10369(prim or kruscal最小生成树)

题目很麻烦,因为不熟悉最小生成树的算法调试了好久。 感觉网上的题目解释都没说得很清楚,不适合新手。自己写一个。 题意:给你点的坐标,然后两点间可以有两种方式来通信:第一种是卫星通信,第二种是无线电通信。 卫星通信:任何两个有卫星频道的点间都可以直接建立连接,与点间的距离无关; 无线电通信:两个点之间的距离不能超过D,无线电收发器的功率越大,D越大,越昂贵。 计算无线电收发器D

poj 1734 (floyd求最小环并打印路径)

题意: 求图中的一个最小环,并打印路径。 解析: ans 保存最小环长度。 一直wa,最后终于找到原因,inf开太大爆掉了。。。 虽然0x3f3f3f3f用memset好用,但是还是有局限性。 代码: #include <iostream>#include <cstdio>#include <cstdlib>#include <algorithm>#incl

hdu 1102 uva 10397(最小生成树prim)

hdu 1102: 题意: 给一个邻接矩阵,给一些村庄间已经修的路,问最小生成树。 解析: 把已经修的路的权值改为0,套个prim()。 注意prim 最外层循坏为n-1。 代码: #include <iostream>#include <cstdio>#include <cstdlib>#include <algorithm>#include <cstri

poj 2175 最小费用最大流TLE

题意: 一条街上有n个大楼,坐标为xi,yi,bi个人在里面工作。 然后防空洞的坐标为pj,qj,可以容纳cj个人。 从大楼i中的人到防空洞j去避难所需的时间为 abs(xi - pi) + (yi - qi) + 1。 现在设计了一个避难计划,指定从大楼i到防空洞j避难的人数 eij。 判断如果按照原计划进行,所有人避难所用的时间总和是不是最小的。 若是,输出“OPETIMAL",若

poj 2135 有流量限制的最小费用最大流

题意: 农场里有n块地,其中约翰的家在1号地,二n号地有个很大的仓库。 农场有M条道路(双向),道路i连接着ai号地和bi号地,长度为ci。 约翰希望按照从家里出发,经过若干块地后到达仓库,然后再返回家中的顺序带朋友参观。 如果要求往返不能经过同一条路两次,求参观路线总长度的最小值。 解析: 如果只考虑去或者回的情况,问题只不过是无向图中两点之间的最短路问题。 但是现在要去要回