当前位置: 首页 > news >正文

leetCode 2578. 最小和分割 + 排序 + 贪心 + 奇偶分组(构造最优解)

2578. 最小和分割 - 力扣(LeetCode)


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

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

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

注意:

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


思路分析总结来自:(https://leetcode.cn/problems/split-with-minimum-sum/)

  • 1.满足nums1 和 nums2的位数小于<= bit_len(num) / 2 尽可能最短
  • 2.依次给nums1 和 nums2 分配较小的数给高位

(1)用一个 nums数组 来存放num的各个位的数字,然后 sort排序,再根据思路分析将其转化为num1 num2

class Solution {
public:int splitNum(int num) {vector<int> nums;while(num){nums.push_back(num%10);num = num / 10;}sort(nums.begin(),nums.end());int num1=0,num2=0;for(int i=0;i<nums.size();i++) {if(i%2==0) num1 = num1 * 10 + nums[i];else num2 = num2 * 10 + nums[i];}return num1 + num2;}
};

这段文字来自这篇博客:位运算&1,」」1,「「1

n&1 就是判断 n 是否为奇数.

  • n 为奇数时,对应的二进制数最低位一定为1,n&1的结果就是1。
  • n为偶数时,相应的最低位为0,n&1的结果就是0。
  • n&1 ==1 或者写 n%2 == 1 或者写 n%2

可以将i%2 == 1 写成 i&1

class Solution {
public:int splitNum(int num) {vector<int> nums;while(num){nums.push_back(num%10);num = num / 10;}sort(nums.begin(),nums.end());int num1=0,num2=0;for(int i=0;i<nums.size();i++) {if(i&1) num2 = num2 * 10 + nums[i];else num1 = num1 * 10 + nums[i];}return num1 + num2;}
};

(2) 将num先转成字符串,接着根据思路分析,拼接两个字符串s1和s2,最后转成int,相加后返回

class Solution {
public:int splitNum(int num) {string s = to_string(num);sort(s.begin(),s.end());string s1,s2;for(int i=0;i<s.size();i++) {// if(i&1) s2 += s[i];// else s1 += s[i];i&1?s2 += s[i] : s1 += s[i];}return stoi(s1) + stoi(s2);}
};

(3)将num先转成字符串,接着根据思路分析,获得num1和num2,相加后返回

class Solution {
public:int splitNum(int num) {string s = to_string(num);sort(s.begin(),s.end());int num1=0,num2=0;for(int i=0;i<s.size();i++) {// if(i&1==1) num2 = num2 * 10 + s[i]-'0';// else num1 = num1 * 10 + s[i]-'0';i&1? num2 = num2 * 10 + s[i]-'0' : num1 = num1 * 10 + s[i]-'0';}return num1 + num2;}
};

(4)将(3)进行进一步优化,省去三目运算

class Solution {
public:int splitNum(int num) {string s = to_string(num);sort(s.begin(),s.end());int a[2]{};for(int i=0;i<s.size();i++) {// a[i % 2] = a[i % 2] * 10 + s[i] - '0'; a[i&1] = a[i&1] * 10 + s[i]-'0';}return a[0] + a[1];}
};
  • 时间复杂度:O(mlog⁡m),其中 m 为 num 转成字符串后的长度。
  • 空间复杂度:O(m)

相关文章:

leetCode 2578. 最小和分割 + 排序 + 贪心 + 奇偶分组(构造最优解)

2578. 最小和分割 - 力扣&#xff08;LeetCode&#xff09; 给你一个正整数 num &#xff0c;请你将它分割成两个非负整数 num1 和 num2 &#xff0c;满足&#xff1a; num1 和 num2 直接连起来&#xff0c;得到 num 各数位的一个排列。 换句话说&#xff0c;num1 和 num2 中所…...

自定义实现图片裁剪

要实现这个功能&#xff0c;首先需要创建一个自定义的View&#xff0c;然后在该View中绘制背景框和裁剪后的图片。以下是一个简单的实现&#xff1a; 1. 创建一个名为CustomImageView的自定义View类&#xff0c;继承自View&#xff1a; import android.content.Context; impor…...

开发语言工具编程系统化教程入门和初级专辑课程上线

开发语言工具编程系统化教程入门和初级专辑课程上线 学习编程捷径&#xff1a;&#xff08;不论是正在学习编程的大学生&#xff0c;还是IT人士或者是编程爱好者&#xff0c;在学习编程的过程中用正确的学习方法 可以达到事半功倍的效果。对于初学者&#xff0c;可以通过下面…...

【Truffle】二、自定义合约测试

一、准备测试 上期我们自己安装部署了truffle&#xff0c;并且体验了测试用例的整个测试流程&#xff0c;实际开发中&#xff0c;我们可以对自己的合约进行测试。 我们首先先明白自定义合约测试需要几个文件 合约文件&#xff1a;既然要测试合约&#xff0c;肯定要有合约的源码…...

场景交易额超40亿,海尔智家三翼鸟开始收获

文 | 螳螂观察 作者 | 余一 随着双十一的到来&#xff0c;国内的消费情绪再次被点燃。在这类大促之下&#xff0c;品牌们就像一个个天体&#xff0c;不断引动着市场潮汐&#xff0c;期待自己能触发更大的“海潮效应”。 所谓“海潮效应”是指&#xff0c;海水因天体的引力而…...

众和策略可靠吗?股票扛杆怎么玩?

可靠 股票扛杆是一种出资战略&#xff0c;经过假贷资金来增加出资金额&#xff0c;从而进步出资收益。这种战略在股票商场中被广泛运用&#xff0c;但一起也伴随着一定的危险。在本文中&#xff0c;咱们将从多个视点来剖析股票扛杆怎么玩。 首要&#xff0c;扛杆出资的原理是…...

解决连接Mysql出现ERROR 2013 (HY000): Lost connection to MySQL server at ‘waiting

在上一篇中解决Mysql ER_ACCESS_DENIED_ERROR: Access denied for user ‘root‘‘localhost‘ (using password: YES)-CSDN博客 写了mysql的密码报错问题&#xff0c;在执行 mysql -u root -p 出现了这个错误&#xff0c; ERROR 2013 (HY000): Lost connection to MySQL se…...

Hadoop YARN功能介绍--资源管理、调度任务

Hadoop YRAN介绍 YARN是一个通用资源管理系统平台和调度平台&#xff0c;可为上层应用提供统一的资源管理和 调度。 他的引入为集群在利用率、资源统一管理和数据共享等方面带来了好处。 1.资源管理系统 集群的硬件资源&#xff0c;和程序运行无关&#xff0c;比如内存、cu…...

从AlexNet到chatGPT的演进过程

一、演进 AlexNet&#xff08;2012&#xff09;&#xff1a; AlexNet是深度学习领域的重要突破&#xff0c;包括5个卷积层和3个全连接层。使用ReLU激活函数和Dropout正则化&#xff0c;获得了ImageNet图像分类比赛的胜利。引入了GPU加速训练&#xff0c;大幅提高了深度神经网络…...

Unity如何实现bHaptics TrackSuit震动衣的SDK接入

前言 TrackSuit是bHaptisc公司旗下的一款震动衣,包括X16,X40等不同型号,是一款尖端的无线高级触觉背心,采用人体工程学设计,具有40个精确的触觉反馈点。通过无缝的跨平台支持和无限制、无滞后的游戏体验,增强您的VR冒险体验。用于PC或者VR游戏中高度还原真实射击触感。官…...

识别flink的反压源头

背景 flink中最常见的问题就是反压&#xff0c;这种情况下我们要正确的识别导致反压的真正的源头&#xff0c;本文就简单看下如何正确识别反压的源头 反压的源头 首先我们必须意识到现实中轻微的反压是没有必要去优化的&#xff0c;因为这种情况下是由于偶尔的流量峰值,Task…...

Spring是如何解决bean循环依赖的问题的

在Spring框架中&#xff0c;循环依赖是指两个或多个Bean之间相互依赖&#xff0c;形成了一个闭环的依赖关系。当存在循环依赖时&#xff0c;Bean的创建过程会陷入死循环&#xff0c;导致应用程序无法启动或出现异常。 说到循环依赖&#xff0c;首先我先说说bean的三级缓存 在S…...

[移动通讯]【Carrier Aggregation-9】【 Radio Resource Control (RRC) Aspects】

前言&#xff1a; CA 分析辅助工具&#xff1a; UE Capabilities 目录&#xff1a; 总体流程 Radio Resource Control (RRC) Aspects SCell addition and removal Handover 一 总体流程 1.1 CA 总体流程 1.2 CA 和 NSA 区别 NSA 我理解也是一种特殊的CA 方案&…...

故障预测与健康管理(PHM)的由来以及当前面临的挑战

故障预测与健康管理&#xff08;PHM&#xff09;作为一项关键技术&#xff0c;旨在帮助企业在事故发生之前较长时间内实现故障预测与健康管理&#xff0c;达到“治未病”的效果。PHM的发展源于对设备可靠性和安全性的追求&#xff0c;以及对预测性维护的需求。然而&#xff0c;…...

【ChatGPT瀑布到水母】AI 在驱动软件研发的革新与实践

这里写目录标题 前言内容简介作者简介专家推荐读者对象目录直播预告 前言 计算机技术的发展和互联网的普及&#xff0c;使信息处理和传输变得更加高效&#xff0c;极大地改变了金融、商业、教育、娱乐等领域的运作方式。数据分析、人工智能和云计算等新兴技术&#xff0c;也在不…...

【Django】项目模型

Django的基本命令 django-admin 命令含义startproject启动Django项目startapp启动Django应用check检查项目完整性runserver本地运行项目shell进入Django项目的Python Shell环境test 进行Django用例测试makemigrations创建模型变更的迁移文件migrate执行makemigrations…...

字符集详解

常见字符集介绍 字符集基础知识&#xff1a; 计算机底层不可以直接存储字符的。 计算机中底层只能存储二进制(0、1) 。 二进制是可以转换成十进制的。 结论&#xff1a;计算机底层可以表示成十进制编号。计算机可以给人类字符进行编号存储&#xff0c;这套编号规则就是字符…...

Vert.x学习笔记-什么是Vert.x

Vert.x介绍 用官网的一句话来总结&#xff1a;Vert.x是用于在JVM上构建响应式应用程序的工具包&#xff0c;项目初期的目标是成为“JVM版的Node.js”&#xff0c;但是后续的发展逐渐偏离了初期的目标&#xff0c;变成了一个给JVM提供量身定制的异步编程基础框架的工具包。 Ver…...

AcWing 第127场周赛 构造矩阵

构造题目&#xff0c;考虑去除掉最后一行最后一列先进行考虑&#xff0c;假设除了最后一行和最后一列都已经排好了&#xff08;你可以随便排&#xff09;&#xff0c;那么分析知最后一个数字由限制以外其他都已经确定了&#xff0c;无解的情况是k为-1 并且n&#xff0c;m的奇偶…...

Seata入门系列【15】@GlobalLock注解使用场景及源码分析

1 前言 在Seata 中提供了一个全局锁注解GlobalLock&#xff0c;字面意思是全局锁&#xff0c;搜索相关文档&#xff0c;发现资料很少&#xff0c;所以分析下它的应用场景和基本原理&#xff0c;首先看下源码中对该注解的说明&#xff1a; // 声明事务仅在单个本地RM中执行 //…...

synchronized 学习

学习源&#xff1a; https://www.bilibili.com/video/BV1aJ411V763?spm_id_from333.788.videopod.episodes&vd_source32e1c41a9370911ab06d12fbc36c4ebc 1.应用场景 不超卖&#xff0c;也要考虑性能问题&#xff08;场景&#xff09; 2.常见面试问题&#xff1a; sync出…...

centos 7 部署awstats 网站访问检测

一、基础环境准备&#xff08;两种安装方式都要做&#xff09; bash # 安装必要依赖 yum install -y httpd perl mod_perl perl-Time-HiRes perl-DateTime systemctl enable httpd # 设置 Apache 开机自启 systemctl start httpd # 启动 Apache二、安装 AWStats&#xff0…...

AtCoder 第409​场初级竞赛 A~E题解

A Conflict 【题目链接】 原题链接&#xff1a;A - Conflict 【考点】 枚举 【题目大意】 找到是否有两人都想要的物品。 【解析】 遍历两端字符串&#xff0c;只有在同时为 o 时输出 Yes 并结束程序&#xff0c;否则输出 No。 【难度】 GESP三级 【代码参考】 #i…...

LeetCode - 394. 字符串解码

题目 394. 字符串解码 - 力扣&#xff08;LeetCode&#xff09; 思路 使用两个栈&#xff1a;一个存储重复次数&#xff0c;一个存储字符串 遍历输入字符串&#xff1a; 数字处理&#xff1a;遇到数字时&#xff0c;累积计算重复次数左括号处理&#xff1a;保存当前状态&a…...

Module Federation 和 Native Federation 的比较

前言 Module Federation 是 Webpack 5 引入的微前端架构方案&#xff0c;允许不同独立构建的应用在运行时动态共享模块。 Native Federation 是 Angular 官方基于 Module Federation 理念实现的专为 Angular 优化的微前端方案。 概念解析 Module Federation (模块联邦) Modul…...

Java入门学习详细版(一)

大家好&#xff0c;Java 学习是一个系统学习的过程&#xff0c;核心原则就是“理论 实践 坚持”&#xff0c;并且需循序渐进&#xff0c;不可过于着急&#xff0c;本篇文章推出的这份详细入门学习资料将带大家从零基础开始&#xff0c;逐步掌握 Java 的核心概念和编程技能。 …...

2023赣州旅游投资集团

单选题 1.“不登高山&#xff0c;不知天之高也&#xff1b;不临深溪&#xff0c;不知地之厚也。”这句话说明_____。 A、人的意识具有创造性 B、人的认识是独立于实践之外的 C、实践在认识过程中具有决定作用 D、人的一切知识都是从直接经验中获得的 参考答案: C 本题解…...

Razor编程中@Html的方法使用大全

文章目录 1. 基础HTML辅助方法1.1 Html.ActionLink()1.2 Html.RouteLink()1.3 Html.Display() / Html.DisplayFor()1.4 Html.Editor() / Html.EditorFor()1.5 Html.Label() / Html.LabelFor()1.6 Html.TextBox() / Html.TextBoxFor() 2. 表单相关辅助方法2.1 Html.BeginForm() …...

倒装芯片凸点成型工艺

UBM&#xff08;Under Bump Metallization&#xff09;与Bump&#xff08;焊球&#xff09;形成工艺流程。我们可以将整张流程图分为三大阶段来理解&#xff1a; &#x1f527; 一、UBM&#xff08;Under Bump Metallization&#xff09;工艺流程&#xff08;黄色区域&#xff…...

工厂方法模式和抽象工厂方法模式的battle

1.案例直接上手 在这个案例里面&#xff0c;我们会实现这个普通的工厂方法&#xff0c;并且对比这个普通工厂方法和我们直接创建对象的差别在哪里&#xff0c;为什么需要一个工厂&#xff1a; 下面的这个是我们的这个案例里面涉及到的接口和对应的实现类&#xff1a; 两个发…...